从git中删除.xcuserstate和DS_Store文件

时间:2014-02-19 01:01:51

标签: ios xcode git gitignore tree-conflict

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

.DS_Store
*.xcuserstate

其他条目。然后我用了:

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

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

所以,我试过这个:How can I Remove .DS_Store files from a Git repository?

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

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

2 个答案:

答案 0 :(得分:22)

您需要在将其从暂存区域中删除后提交更改。

正如您所做的那样,运行:

$ 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,也会删除其他人的文件。不幸的是,你无能为力。此外,文件仍在您的历史记录中,因此根据您的操作,您可能会在其他分支中看到它们,直到事情合并并且所有分支都基于具有新提交的内容。

答案 1 :(得分:2)

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