如何从Git存储库中删除那些烦人的Mac OS X.DS_Store文件?


当前回答

排名靠前的答案很好,但帮助像我这样的新手,下面是如何创建.gitignore文件,编辑它,保存它,删除您可能已经添加到git的文件,然后将文件推到Github。

创建.gitignore文件

要创建.gitignore文件,只需触摸创建具有指定名称的空白文件的文件即可。我们希望创建名为.gitignore的文件,以便可以使用以下命令:

touch.gitignore

忽略文件

现在,您必须将告诉git忽略DS Store文件的行添加到您的.gitignore中。您可以使用nano编辑器来完成此操作。

nano.git忽略

Nano很好,因为它包含如何退出的说明。(按Ctrl-O保存,按Ctrl-X退出)

复制并粘贴Github要点中的一些想法,其中列出了一些要忽略的常见文件。要回答这个问题,最重要的是:

# OS generated files #
######################
.DS_Store
.DS_Store?

#是注释,将帮助您在文件增长时组织文件。

这篇Github文章也有一些一般的想法和指导原则。

删除已添加到git的文件

最后,您需要从目录中实际删除这些DS Store文件。

使用这个来自投票结果最高的命令。这将遍历目录中的所有文件夹,并从git中删除这些文件。

查找-name.DS_Store-print0|xargs-0 git rm-f--忽略取消匹配

将.gitignore推送到Github

最后一步,您需要实际提交.gitignore文件。

git状态

git-add.gitignore

gitcommit-m‘.DS_Store已被驱逐!’

其他回答

如果您使用的是GitHub Desktop应用程序,则此方法有效。

如果还没有,请在应用程序中打开存储库(¨O)从“存储库”选项卡中,选择“存储库设置”。转到“忽略的文件”并添加您希望忽略的文件。

以下方法对我来说效果最好。处理了不匹配的文件,以及本地修改的文件。作为参考,这是在运行git 1.7.4.4的Mac 10.7系统上。

查找并删除:

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

我还通过设置全局core.excludsfile来全局忽略.DS_Store。

首先,创建文件(如果还不存在):

touch ~/.gitignore

然后添加以下行并保存:

.DS_Store

现在配置git以全局尊重文件:

git config --global core.excludesfile ~/.gitignore

结合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 repo中的这些文件。这可以通过创建一个全局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

编辑:

删除了图标,因为它们可能需要作为应用程序资产提交。

我必须将上面的git rm更改为git rm才能使其工作:

find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print