我在做什么:
我在 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 分支,那么各种用户界面文件也想加入聚会。
问题:
那么,“排除”文件实际上在做什么?有没有办法使排除文件取消跟踪或轻松地将其自身应用于所有 repo 分支?
如果没有,我怎样才能让我的项目进入与我在第一个方 block 从 Xcode 创建 git 存储库时相同的状态?
最佳答案
您引用的第一个 git rm --cached
命令失败的一个原因是 .DS_Store
是一个目录。尝试:
git rm -r --cached .DS_Store
... 相反。您可能还想检查 git ls-files
是否在存储库中跟踪该目录中的实际文件。如果没有,那也可以解释您遇到错误。检查这些文件的大小写是否也完全正确。
(这些通常是有用的排除规则,我会顺便添加到 .gitignore
。)
回答你的另一个问题:
So, what is the 'exclude' file actually doing? Is there a way to make the exclude file untrack or apply itself to all repo branches easily?
如果文件已经在存储库中被跟踪,您仍然需要手动取消暂存它们,无论它们是否被忽略/排除。本质上,您可以添加排除规则的各个地方都有 the same syntax and semantics .这些规则的优先级也在该文档中进行了描述,但本质上是:
- 命令行中提供的排除规则具有最高优先级。
- 然后是
.gitignore
文件,从当前目录开始,一直到顶层。 - 然后使用
.git/info/exclude
。 - 最后,最低优先级的规则可能位于配置选项
core.excludesfile
指定的文件中。
关于xcode - 如何从 Git 存储库中删除 'excluded' 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7924366/