从git中删除.xcuserstate和DS_Store文件

Bry*_*yce 20 git xcode gitignore tree-conflict ios

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

.DS_Store
*.xcuserstate
Run Code Online (Sandbox Code Playgroud)

其他条目.然后我用了:

git rm --cached *xcuserstate
git rm ---cached .DS_Store
Run Code Online (Sandbox Code Playgroud)

要删除版本控制下的这些文件类型.但是,当我去合并时,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
Run Code Online (Sandbox Code Playgroud)

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

Joh*_*ter 24

将您的更改从暂存区域中删除后,您需要提交更改.

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

$ git rm --cached path/to/.DS_Store
$ git rm --cached *.xcuserstate
Run Code Online (Sandbox Code Playgroud)

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

$ git add .gitignore
$ git commit -m "Remove and ignore .xcuserstate and .DS_Store files."
Run Code Online (Sandbox Code Playgroud)

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

  • 您还可以使用git rm --cached*.DS_Store查找并删除项目中的所有.DS_Store文件. (2认同)
  • 您可能需要将其包装在引号中以防止shell扩展它并让git做到这一点.另外,我通常会避免使用这种策略,因为您可能会在其他时间使用它并意外删除您不想要的文件.但是,如果你小心,它是有用的. (2认同)