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

Shu*_*Gao 1 git gitignore git-stage

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

# Git info
app/src/main/java/com/test/util/VersionUtil.java
Run Code Online (Sandbox Code Playgroud)

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

public static final String COMMIT_INFO = "info".
Run Code Online (Sandbox Code Playgroud)

我运行 git status 并返回

Your branch is up-to-date with 'origin/develop'.
Run Code Online (Sandbox Code Playgroud)

但是,在我运行该项目后,VersionUtil.java 发生了变化。那一行是:

public static final String COMMIT_INFO = "6a604 XXXXX ".
Run Code Online (Sandbox Code Playgroud)

返回的 git 状态

modified:   app/src/main/java/com/test/util/VersionUtil.java
Run Code Online (Sandbox Code Playgroud)

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

hel*_*ert 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
Run Code Online (Sandbox Code Playgroud)

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

git rm --cached app/src/main/java/com/test/util/VersionUtil.java
git commit -m'Remove VersionUtil.java from version control'
Run Code Online (Sandbox Code Playgroud)