2011-10-28 220 views
2

我在做什么:如何从Git存储库中删除“排除的”文件?

我在Xcode工作,并开始使用Git不久前。

正常情况下,我不希望将某些文件包含在Git数据库中,这些文件与Xcode设置有关。我已经使用了一段时间的Git仓库,但现在想删除这些'编辑'文件,因为它们正在创建问题。


我如何做:

正确的方式做,这显然是不使用的.gitignore。相反,它是使用.git/info/exclude。通过在Xcode中创建一个新项目并选择“使用Git”选项,我可以发现默认设置应该是以下的.git/info/exclude文件:

.DS_Store

UserInterface.xcuserstate

所以我复制这个文件排除在为我的工作与项目相同的git的位置,它似乎是确定。除...


错在:

课程的文件将不会无需人工干预被删除/从我目前的项目未被跟踪。所以,我已经试过以下,这工作,并告诉我,有没有这样的文件:

git rm --cached .DS_Store 
git rm --cached UserInterface.xcuserstate 

但这些文件肯定是有,如果我去犯我的回购分支,那么所有各种用户界面文件也想加入派对。


问题:

那么,什么是 '排除' 文件实际上在做什么?有没有一种方法可以使排除文件无法解决或将其自身应用于所有回购分支?

如果没有,我怎样才能让我的项目进入与我在Xcode创建git仓库时相同的状态?

+0

你为什么说'.gitignore'是排除文件的错误方法?我一直使用它没有问题。另外,我通常尽量远离.git目录,通常有更好的方法来用git完成任务。 –

+0

Xcode创建git仓库的方式,它不使用.gitignore。阅读http://help.github.com/ignore-files/的底部,了解为什么排除文件更加正确。 –

+0

是的,我刚刚发现..使用.gitignore ...没有错,只是不理会忽略这些文件...我主要使用vim来处理我的项目,所以我没有很多编辑器文件忽略,我不知道排除文件的东西。 –

回答

2

您引用的第一个git rm --cached命令会失败的一个原因是.DS_Store是一个目录。尝试:

git rm -r --cached .DS_Store 

...改为。您可能还想检查git ls-files该存储库中该目录中是否有实际的文件被跟踪。如果没有,那么这也会解释你得到一个错误。检查你是否正确地处理这些文件。

(这些通常是有用的排除规则,我会添加到.gitignore,顺便说一句。)

为了回答您的其他问题:

那么,什么是真正做 '排除' 文件?有没有一种方法可以使排除文件无法解决或将其自身应用于所有回购分支?

如果已经在存储库中跟踪文件,则仍需要手动取消它们,而不管它们是否被忽略/排除。基本上,您可以添加排除规则的各个位置都有the same syntax and semantics。这些规则的优先级也在该文档中进行了描述,但基本上是:

  • 排除在命令行上提供的规则具有最高优先级。
  • 然后.gitignore文件,从当前目录开始并上升到顶层。
  • 然后使用.git/info/exclude
  • 最后,最低优先级规则可以在配置选项core.excludesfile指定的文件中。
相关问题