忽略git中修改(但未提交)的文件?


181

我可以告诉git忽略已修改(删除)但不应该提交的文件吗?

情况是,我在存储库中有一个子目录,其中包含我完全不感兴趣的内容,因此我删除了该目录以防止它显示在自动完成等中(在IDE中)。

但是现在,如果我将该文件夹添加到.gitignore中,则没有任何变化,所有内容都显示为git status删除。

有没有办法让git忽略它呢?

(或者,当我使用git-svn时,我可以将更改提交到本地git并确保不将其传递给svn存储库吗?)


您可能希望将它们从索引中完全删除,而不只是在回购索引中将它们标记为未修改。因此,尽管您仍将文件保存在工作目录中,但可以完全删除repo索引,而git甚至根本不会认为它已经存在。请在下面的答案中查看链接。
MaurerPower

Answers:


274

查阅git-update-index手册页和--assume-unchanged位以及相关内容。

当我遇到您的问题时,我会这样做

git update-index --assume-unchanged dir-im-removing/

或特定文件

git update-index --assume-unchanged config/database.yml

3
您能以某种方式列出所有被忽略的文件吗?
Zitrax 2010年

21
您可以通过git update-index --no-assume-unchanged config/database.yml
Denis Kniazhev

1
如果没有较新的解决方案,请参见下面的Dave L的答案以获取更新的解决方案--assume-unchanged
Ben Challenor 2013年

2
是否可以将其添加到存储库配置文件中,而不是每次都手动运行此命令?
Tim Boland 2014年

1
它会在下次提交时显示为已修改吗?我不希望它永远不变。
Pranav Nandan '18

41

一个更新更好的选择是 git update-index --skip-worktree在硬重置或拉动进行新更改时不会丢失。

请参见http://schacon.github.com/git/git-update-index.html上的手册页

并在http://fallengamer.livejournal.com/93321.html进行比较


9
要注意的一个缺点是,一旦使用隐藏了文件的修改skip-worktree,查找这些文件将变得很麻烦。我知道的唯一方法是git ls-files -v |grep -v '^H'。而且,许多GUI工具都不知道此功能,如果例如checkout由于“隐藏”的修改文件而失败,则可能会产生有趣的错误。
sleske 2012年

我从未能够理解任何git doc文件。所以这没有太大帮助。(每个文档文件都假定您了解其他所有文档文件的精妙之处!)
Scott Biggs

7

使用此代码

git update-index --assume-unchanged file-name

1
非常有意思。我必须在我的Maven项目中使用密码,但是我不想将其发布在git存储库上,因此我将占位符放在本地,属性中不带任何值,我提交了密码,然后插入了密码,但是标记了文件与建议的命令保持不变。因此密码未发布。
Stefano Scarpanti,

6

跟踪的文件不可忽略,因此您必须首先将其从索引中删除。添加一个.gitignore忽略您不需要的目录的,然后将其删除,并使用删除所有散乱的内容git rm --cached


1
嗯,我试试看,但是然后我列出了所有已删除的文件。我是否应该提交该文件,并且--cached将导致它不会被推送到远程服务器?还是我得到了……。错误?对我来说最重要的是不要破坏远程(svn)存储库。

1
您不能提交任何没有出现在索引中的内容。git rm-缓存所有您不想提交的内容,然后在本地添加一个带有“ *”的.gitignore文件。现在,无论您添加了多少git,您都不会再在索引中看到这些文件。
约翰·费米内拉

嗯,我想我现在知道--cached了。它只会从索引中删除内容,而只剩下工作树了。 ,将其从工作树中删除而不触及索引。.或者我可以某种方式使用它吗?

6

我通常要做的是

git存储

git what-else

git stash适用

git隐藏


10
接下来,您也可以“ git stash pop”一次执行最后两个操作(尽管如果需要,“ git stash clear”将清除所有存储条目)。
Groxx
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.