23

在 Xcode 中,我注意到 .DS_Store 和 *.xcuserstate 总是会改变,不需要提交。所以,我写了一个 .gitignore 文件,其中包含:

.DS_Store
*.xcuserstate

在其他条目中。然后我用:

git rm --cached *xcuserstate
git rm ---cached .DS_Store

删除已经在版本控制下的这些文件类型。但是,当我去合并时,Xcode 告诉我有一些更改需要提交。这些更改包括 .DS_Store 文件和 .xcuserstate 文件。

所以,我尝试了这个:如何从 Git 存储库中删除 .DS_Store 文件?

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
find . -name *.xcuserstate -print0 | xargs -0 git rm --ignore-unmatch

我得到了同样的结果。如何从源代码管理中永久删除这些文件?

4

2 回答 2

28

从暂存区域中删除它们后,您需要提交更改。

正如你已经做的那样,运行:

$ git rm --cached path/to/.DS_Store
$ git rm --cached *.xcuserstate

请注意,您可能在其他目录中有一些,因此您可能需要多次调用才能全部获取它们。此时,您的删除已在索引中暂存,但还有更多工作要做:添加您的.gitignore,并提交最终结果:

$ git add .gitignore
$ git commit -m "Remove and ignore .xcuserstate and .DS_Store files."

现在它们将从存储库中删除,并在将来被忽略。注意:这将删除其他人的文件,即使您git rm --cached在本地使用。不幸的是,您对此无能为力。此外,这些文件仍在您的历史记录中,因此根据您的操作,您可能会在其他分支中看到它们,直到合并所有内容并且您的所有分支都基于具有新提交的内容。

于 2014-02-19T10:55:05.910 回答
3

试试看git update-index --assume-unchanged *.xcuserstate .DS_Store是否有帮助

于 2014-02-19T03:04:10.193 回答