1

我有一个名为 VersionUtil 的文件并将其设置到 gitignore 中。在 gitignore 文件中,我有

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

在我在android studio中运行项目之前,VersionUtil.java中有一行代码:

public static final String COMMIT_INFO = "info".

我运行了 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 中的文件仍在被跟踪?任何帮助,将不胜感激。

4

1 回答 1

6

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

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

gitignore 文件指定了 Git 应该忽略的故意未跟踪的文件。Git 已跟踪的文件不受影响[...]。

[...]

  • gitignore 文件的目的是确保Git 未跟踪的某些文件保持未跟踪

  • 要忽略已跟踪文件中未提交的更改,请使用git update-index --assume-unchanged.

  • 要停止跟踪当前跟踪的文件,请使用 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'
于 2015-04-20T22:00:31.277 回答