<分区>
我需要忽略对已被 Git 跟踪的特定文件所做的任何更改。这些文件不应从本地或远程存储库中删除。
我试图在 .gitignore 中忽略它们,但它不起作用。
.gitignore:
$MAVEN_PATH_TO_CHILD_MODULE/src/main/java/$PACKAGE/$CLASS.java
知道为什么吗?
<分区>
我需要忽略对已被 Git 跟踪的特定文件所做的任何更改。这些文件不应从本地或远程存储库中删除。
我试图在 .gitignore 中忽略它们,但它不起作用。
.gitignore:
$MAVEN_PATH_TO_CHILD_MODULE/src/main/java/$PACKAGE/$CLASS.java
知道为什么吗?
最佳答案
只能忽略未跟踪 文件(未添加到 Git)。或者换句话说,忽略是关于 Git 不知道的文件,即不在索引中(在暂存区中没有条目)。
要使文件不被跟踪(将其从索引中删除,从而在下一次提交时将其暂存以防止删除),但将其保留在工作区域中,即在文件系统中,您可以使用
$ git rm --cached <file>
在本地提交和推送到远程之后,该文件将从远程存储库中删除(从顶级提交的树中 - 它仍将存在于历史记录中)。
注意:这是不安全,可能会导致数据丢失!!!对于更安全(虽然不完美)的替代方案,请参见下文。
如果您想让 Git 忽略更改,那么 git diff
和 git status
不会报告他们,并且git commit -a
不会提交它们(但是 git add <file>
+ git commit
和 git commit <file>
仍然会添加它们),你可以用这个技巧骗 Git(见git ready » temporarily ignoring files文章):
$ git update-index --assume-unchanged <file>
git update-index
命令是低级(管道)命令。您可以通过以下方式找到“假定未更改”的文件:
$ git ls-files -v
h <file>
git ls-files -v
使用小写字母表示标记为假设未更改的状态文件。
你可以关闭它
$ git update-index --no-assume-unchanged <file>
请注意,此选项最初的目的是在 stat
的平台上加速状态很慢。
关注@Dave 评论,并引用 Git - Difference Between 'assume-unchanged' and 'skip-worktree'问题,另一个足够现代的 Git 选项是让 Git 不使用带有 skip-worktree 位的工作区版本。
您可以为跟踪的文件打开它
$ git update-index --skip-worktree <file>
这使得 Git 使用索引版本(最后提交的版本)代替文件系统中的版本。您可以检查哪些文件设置了此位
$ git ls-files -v
S <file>
git ls-files -v
命令将使用 S
表示设置了“skip-worktree”的文件。
请注意,此选项最初的目的是支持稀疏 checkout 。
关于git - 如何忽略已提交给 Git 的文件的任何更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28497104/