在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
我得到了同样的结果。如何从源代码管理中删除这些文件?
答案 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
并查看是否有帮助