如何从Git存储库中删除.DS_Store文件?

我怎样才能从Git仓库中删除那些烦人的Mac OS X .DS_Store文件?

从存储库中删除现有的文件:

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

添加行

 .DS_Store 

到文件.gitignore ,它可以在你的仓库的顶层find(或者如果它不存在的话就创build)。 然后

 git add .gitignore git commit -m '.DS_Store banished!' 

结合benzado和webmat的答案,使用git rm更新,而不是发现没有回购的文件失败,并将其粘贴到任何用户一般:

 # 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 

解决这个问题的最佳解决scheme是全局忽略来自系统上所有git仓库的这些文件。 这可以通过创build一个全局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 

现在,将这个文件添加到你的全局gitconfiguration中:

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

编辑:

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

在某些情况下,您可能还想忽略全局的一些文件。 对我来说,.DS_Store就是其中之一。 就是这样:

 git config --global core.excludesfile /Users/mat/.gitignore 

(或者您select的任何文件)

然后像回购的.gitignore一样编辑文件。 请注意,我认为你必须使用绝对path。

我不得不在上面改变git-rm到git rm来让它工作:

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

使用git-rm删除它们,然后将.DS_Store添加到.gitignore以阻止它们再次被添加。 你也可以使用blueharvest来阻止他们一起创build

如果因为更改了分段使用而无法删除文件:

 git rm --cached -f *.DS_Store 

打开terminal并input“cd <ProjectPath>”

  1. 删除现有文件: find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

  2. nano .gitignore

  3. 添加这个.DS_Store

  4. 键入“ctrl + x”

  5. 键入“y”

  6. input保存文件

  7. git add .gitignore

  8. git commit -m '.DS_Store removed.'

以下对我最有效。 处理不匹配的文件和本地修改的文件。 作为参考,这是在运行git 1.7.4.4的Mac 10.7系统上。

查找并移除:

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

我也通过设置一个全局的core.excludes文件来全局忽略所有版本库中的.DS_Store。

首先,创build文件(如果不存在的话):

 touch ~/.gitignore 

然后添加以下行并保存:

 .DS_Store 

现在configurationgit来全局尊重文件:

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

我发现从snipplr的下面的行最好擦拭所有.DS_Store,包括一个本地修改。

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

– caching的选项,保持您的本地.DS_Store,因为它会被转载。

就像上面提到的一样,将.DS_Store添加到项目根目录下的.gitignore文件。 那么它将不再在你的视野(回购)。

使用此命令删除现有的文件:

 find . -name '*.DS_Store' -type f -delete 

然后将.DS_Store添加到.gitignore

最受赞赏的答案是真棒,但帮助像我这样的新秀,这里是如何创build.gitignore文件,编辑它,保存它,删除您可能已经添加到git的文件,然后将文件上推到Github。

创build.gitignore文件

要创build一个.gitignore文件,只需touch创build一个具有指定名称的空白文件的文件即可。 我们要创build名为.gitignore的文件,以便我们可以使用以下命令:

touch .gitignore

忽略这些文件

现在你必须添加一行,告诉git忽略DS存储文件到你的.gitignore。 你可以使用nano编辑器来做到这一点。

nano .gitignore

纳米是很好的,因为它包括如何摆脱它的指示。 ( CtrlO保存, CtrlX退出)

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

 # 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!'

这将工作:

 find . -name *.DS_Store -type f -exec git-rm {} \; 

有几个解决scheme来解决这个问题。 为避免创build.DS_Store文件,请勿使用OS X Finder查看文件夹。 查看文件夹的另一种方法是使用UNIX命令行。 要删除.DS_Store文件,可以使用名为DS_Store Terminator的第三方产品。 要从整个系统中删除.DS_Store文件,可以使用UNIX shell命令。 从应用程序启动terminal:实用程序在UNIX shell提示符处,input以下UNIX命令:sudo find / -name“.DS_Store”-depth -exec rm {} \; 当系统提示input密码时,请inputMac OS Xpipe理员密码。

该命令是通过整个机器从文件系统的根(/)开始查找和删除所有.DS_Store事件。 要将此命令configuration为按计划任务运行,请按照以下步骤操作:从应用程序:实用程序启动terminal在UNIX shell提示符处,input以下UNIX命令:

sudo crontab -e当提示input密码时,请inputMac OS Xpipe理员密码。 一旦在vi编辑器中按一下键盘上的字母I并input以下内容:

15 1 * * * rootfind/ -name“.DS_Store”-depth -exec rm {} \;

这被称为crontab项,它具有以下格式:

分钟小时DayOfMonth Month DayOfWeek用户命令。

crontab条目意味着命令将由系统每天凌晨1点15分由root帐户自动执行。

该命令从find一路开始。 如果系统没有运行,这个命令不会被执行。

要保存input,按Esc键一次,然后同时按下Shift + z + z。

注意:步骤4中的信息仅适用于vi编辑器。

由于某种原因,以上都没有在我的Mac上工作。

我的解决scheme是从terminal运行

  rm .DS_Store 

然后

  git pull origin master 

初始化你的仓库时,跳过包含的git命令

 -u 

这不应该是一个问题。

这对我来说,从上面的两个答案组合:

  • $ git rm –cached -f * .DS_Store
  • $ git commit -m“filter-branch –index-filter'git rm –cached –ignore-unmatch .DS_Store”
  • $ git push origin master –force
 $ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store" $ git push origin master --force 

将此添加到您的文件.gitignore

 #Ignore folder mac .DS_Store 

保存并提交

 git add -A git commit -m "ignore .DS_Store" 

现在你忽略了所有的提交