为什么 gitignore 中的文件会在 android studio 编译后被修改?

why file in gitignore will be modified after android studio compile?

我有一个名为 VersionUtil 的文件并将其设置为 git忽略。 在git忽略文件中,我有

# Git info
app/src/main/java/com/test/util/VersionUtil.java

之前我运行在android工作室的项目,VersionUtil.java里面有一行代码:

public static final String COMMIT_INFO = "info".

I 运行 git status 返回

Your branch is up-to-date with 'origin/develop'.

但是,我运行这个项目后,VersionUtil.java被改了。那一行是:

public static final String COMMIT_INFO = "6a604 XXXXX ".

git状态返回

modified:   app/src/main/java/com/test/util/VersionUtil.java

你们有什么想法吗?为什么gitignore里的文件还在被跟踪?任何帮助将不胜感激。

一个.gitignore文件只影响未跟踪个文件。已经 跟踪 的文件不会受到 .gitignore 文件的任何影响。这意味着如果一个文件已经在版本控制下,然后添加到 .gitignore 之后 ,Git 将不会开始忽略已经跟踪的文件。

引用手册页(强调我的):

A gitignore file specifies intentionally untracked files that Git should ignore. Files already tracked by Git are not affected [...].

[...]

  • The purpose of gitignore files is to ensure that certain files not tracked by Git remain untracked.

  • To ignore uncommitted changes in a file that is already tracked, use git update-index --assume-unchanged.

  • To stop tracking a file that is currently tracked, use git rm --cached.

第二个建议的备选方案可能适合您:

git update-index --assume-unchanged app/src/main/java/com/test/util/VersionUtil.java

或者,您可以删除文件(物理删除,或仅从版本控制中删除)。之后,.gitignore文件应该生效了:

git rm --cached app/src/main/java/com/test/util/VersionUtil.java
git commit -m'Remove VersionUtil.java from version control'