2010-08-30 32 views
8

比方说,我的存储库根目录中有一个.noise文件。该文件经常被我的团队中的其他人修改并提交给远程回购。忽略已存在于回购协议中的文件而不删除它们

我想完全忽略这个文件,而我自己提交任何东西,但我仍然想从其他人提交更改,并且我不想删除该文件。如果我使用.git/info/exclude,那么我必须git rm --cached该文件,所以它不会显示在回购。

现在这样做,让我从:

# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: .noise 
# 
# No changes added to commit (use "git add" and/or "git commit -a") 

到:

# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
# deleted: .noise 
# 

的 '变更,必须致力于' 让我害怕。我不想将.noise删除回到远程,我不希望它在我的filessytem上被删除。我只是不希望Git看到或与它有任何关系。我想到git rm --cached不应该改变?那不是吗?

任何想法?

+0

是否自己更改这个文件?你想在你的工作树中看到这个文件的远程更改吗? – Shcheklein 2010-08-30 20:55:18

回答

14

您可以使用:

$ git update-index --assume-unchanged -- .noise 

update-index --assume-unchanged将Git的继续追踪文件,但更改将不会体现在指数或加入到回购。

+0

据我所知,这种方式将工作,如果该文件将实际上没有改变。 Git将无法以某种方式提交修改该文件的提交:“如果需要在索引中修改此文件(例如合并提交时),Git将失败(正常);因此,如果假设未跟踪文件在上游发生更改,你需要手动处理这种情况。“ (见git-update-index(1)) – Shcheklein 2010-08-30 22:32:07

+0

'git update-index --assume-unchanged'是我前一阵子试过的。没有效果! 添加' - .noise'似乎就这样做了。 现在很有趣,因为我认为update-index基本上是通过再次查找更改的目录循环。我不知道它必须在单个文件上调用。谢谢。 – 2010-08-30 22:32:34

+0

@Shcheklein“Git将无法以某种方式提交修改此文件的提交”那么也许这不是最终的全部解决方案。我将不得不测试并验证远程提交是否被撤销。 – 2010-08-30 22:34:31

相关问题