如何从Git存储库中删除“排除”的文件?

时间:2011-10-28 01:55:11

标签: xcode git version-control xcode4 repository

我在做什么:

我在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

但是这些文件肯定存在,如果我去提交我的repo分支,那么各种用户界面文件也想加入派对。


问题:

那么,'排除'文件实际上是做什么的?有没有办法让排除文件不被跟踪或轻松地将自己应用于所有的回购分支?

如果没有,我如何让我的项目进入与我在第一个方向从Xcode创建git repo时相同的状态?

1 个答案:

答案 0 :(得分: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指定的文件中。