如何.DS_Store
从Git存储库中删除那些烦人的Mac OS X 文件?
从存储库中删除现有文件:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
添加行
.DS_Store
到文件.gitignore
,可以在您的存储库的顶层找到(或者如果它已经存在则创建).您可以使用顶级目录中的此命令轻松完成此操作
echo .DS_Store >> .gitignore
然后
git add .gitignore git commit -m '.DS_Store banished!'
结合benzado和webmat的答案,更新git rm
,而不是发现不在repo中的文件失败,并使其一般可以为任何用户粘贴:
# remove any existing files from the repo, skipping over ones not in repo find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch # specify a global exclusion list git config --global core.excludesfile ~/.gitignore # adding .DS_Store to that list echo .DS_Store >> ~/.gitignore
解决此问题的最佳解决方案是全局忽略系统上所有git存储库中的这些文件.这可以通过创建全局gitignore文件来完成,例如:
vi ~/.gitignore_global
添加规则以忽略如下文件:
# Compiled source # ################### *.com *.class *.dll *.exe *.o *.so # Packages # ############ # it's better to unpack these files and commit the raw source # git has its own built in compression methods *.7z *.dmg *.gz *.iso *.jar *.rar *.tar *.zip # Logs and databases # ###################### *.log *.sql *.sqlite # OS generated files # ###################### .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes ehthumbs.db Thumbs.db
现在,将此文件添加到您的全局git配置:
git config --global core.excludesfile ~/.gitignore_global
编辑:
删除了图标,因为它们可能需要作为应用程序资产提交.
在某些情况下,您可能还想忽略全局的某些文件.对我来说,.DS_Store就是其中之一.这是如何做:
git config --global core.excludesfile /Users/mat/.gitignore
(或您选择的任何文件)
然后像repo的.gitignore一样编辑文件.请注意,我认为您必须使用绝对路径.
如果由于进行了更改而无法删除文件,请使用:
git rm --cached -f *.DS_Store
打开终端并输入"cd
删除现有文件:
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
nano .gitignore
加上这个 .DS_Store
输入"ctrl + x"
输入"y"
输入以保存文件
git add .gitignore
git commit -m '.DS_Store removed.'
我不得不在上面将git-rm更改为git rm以使其工作:
find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print
最受欢迎的答案很棒,但帮助像我这样的新手,这里是如何创建.gitignore文件,编辑它,保存它,删除你可能已添加到git的文件,然后将文件推送到Github.
创建.gitignore文件
要创建.gitignore文件,您只能touch
创建具有指定名称的空白文件的文件.我们要创建名为.gitignore的文件,以便我们可以使用以下命令:
touch .gitignore
忽略文件
现在你必须添加一行告诉git忽略你的.gitignore的DS Store文件.您可以使用nano编辑器执行此操作.
nano .gitignore
Nano很不错,因为它包含了如何摆脱它的说明.(Ctrl- O保存,Ctrl- X退出)
复制并粘贴这个Github要点中的一些想法,列出了一些要忽略的常见文件.回答这个问题最重要的是:
# OS generated files # ###################### .DS_Store .DS_Store?
#是评论,可以帮助您在文件增长时整理文件.
这篇Github文章也有一些一般性的想法和指导方针.
删除已添加到git的文件
最后,您需要从目录中实际删除这些DS Store文件.
从最高投票的答案中使用这个伟大的命令.这将遍历目录中的所有文件夹,并从git中删除这些文件.
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
将.gitignore推送到Github
最后一步,您需要实际提交.gitignore文件.
git status
git add .gitignore
git commit -m '.DS_Store banished!'
使用删除它们git-rm
,然后添加.DS_Store .gitignore
以阻止它们再次添加.您还可以使用blueharvest来阻止它们一起创建
使用此命令删除现有文件:
find . -name '*.DS_Store' -type f -delete
然后加入.DS_Store
到.gitignore
以下对我来说效果最好.处理不匹配的文件和具有本地修改的文件.作为参考,这是在运行git 1.7.4.4的Mac 10.7系统上.
查找并删除:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f
我还通过设置全局core.excludes文件来全局忽略所有存储库中的.DS_Store.
首先,创建文件(如果尚不存在):
touch ~/.gitignore
然后添加以下行并保存:
.DS_Store
现在配置git以全局尊重文件:
git config --global core.excludesfile ~/.gitignore
如果您要将DS_Store文件删除到每个文件夹和子文件夹:
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
忽略它们:
echo ".DS_Store" >> ~/.gitignore_global echo "._.DS_Store" >> ~/.gitignore_global echo "**/.DS_Store" >> ~/.gitignore_global echo "**/._.DS_Store" >> ~/.gitignore_global git config --global core.excludesfile ~/.gitignore_global
我发现snipplr的以下行最能擦除所有内容.DS_Store
,包括一个有局部修改的行.
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--cached
选项,保留你的本地,.DS_Store
因为它无论如何都会被复制.
就像上面提到的那样.DS_Store
,在项目的根目录中添加.gitignore文件.然后它将不再在您的视线中(回购).
我参加聚会有点晚了,但是我有一个很好的答案。要删除.DS_Store文件,请在终端窗口中使用以下命令,但要非常小心地使用'find'删除文件。使用带有-name选项的特定名称是更安全的使用方式之一:
cd directory/above/affected/workareas find . -name .DS_Store -delete
如果只想在它们之前和之后列出它们,则可以省略“ -delete”。这样可以使您确信它们已经消失了。
关于〜/ .gitignore_global建议:在这里要小心。您想将该漂亮的文件放在每个工作区的顶层的.gitignore中并提交,以便克隆您的存储库的任何人都可以从使用它的好处中受益。