How can I Remove .DS_Store files from a Git repository?
如何从Git存储库中删除那些恼人的MacOSX
从存储库中删除现有文件:
1 | find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch |
添加线
1 | .DS_Store |
到文件
1 | echo .DS_Store >> .gitignore |
然后
1 2 | git add .gitignore git commit -m '.DS_Store banished!' |
结合benzado和webmat的答案,使用
1 2 3 4 5 6 | # 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 repos中的这些文件。这可以通过创建全局gitignore文件来完成,例如:
1 | vi ~/.gitignore_global |
添加忽略以下文件的规则:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | # 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配置中:
1 | git config --global core.excludesfile ~/.gitignore_global |
编辑:
删除图标,因为它们可能需要作为应用程序资产提交。
在某些情况下,您可能还希望全局忽略某些文件。对我来说,.ds_商店就是其中之一。以下是如何:
1 | git config --global core.excludesfile /Users/mat/.gitignore |
(或您选择的任何文件)
然后像repo的.gitignore一样编辑文件。请注意,我认为您必须使用绝对路径。
如果由于文件具有阶段性更改而无法删除这些文件,请使用:
1 | git rm --cached -f *.DS_Store |
打开终端并键入"cd
删除现有文件:
加上这个
"CTRL+X"类型
"Y"型
输入以保存文件
我必须在上面将git rm更改为git rm才能使其工作:
1 | find . -depth -name '.DS_Store' -exec git rm --cached '{}' \; -print |
最热门的答案是很棒的,但是帮助像我这样的新手,这里是如何创建.gitignore文件,编辑它,保存它,删除你可能已经添加到git的文件,然后把文件推到github。
创建.gitignore文件
要创建一个.gitignore文件,只需创建一个具有指定名称的空白文件。我们要创建名为.gitignore的文件,以便使用以下命令:
忽略文件
现在您必须添加一行命令git忽略ds存储文件到.git ignore。您可以使用nano编辑器来执行此操作。
nano很不错,因为它包含了如何摆脱它的说明。(要保存的ctrl o,要退出的ctrl xbakbd)
复制并粘贴这个Github Gist中的一些想法,其中列出了一些要忽略的常见文件。回答这个问题最重要的是:
1 2 3 4 | # OS generated files # ###################### .DS_Store .DS_Store? |
是注释,它将帮助您在文件增长时组织文件。
这篇Github文章也有一些一般性的想法和指导方针。
删除已经添加到git的文件
最后,您需要实际地从目录中删除这些DS存储文件。
使用这个来自投票结果最高的命令。这将遍历目录中的所有文件夹,并从git中删除这些文件。
push.gitignore到github
最后一步,您需要实际提交.gitignore文件。
使用
使用此命令删除现有文件:
1 | find . -name '*.DS_Store' -type f -delete |
然后把
如果要将DS-Store文件删除到每个文件夹和子文件夹:对于已提交的DS-U存储:
1 | find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch |
忽略它们:
1 2 3 4 5 | 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 |
以下这些对我来说最有效。处理了不匹配的文件和经过本地修改的文件。作为参考,这是在运行git 1.7.4.4的mac 10.7系统上进行的。
查找并删除:
1 | find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f |
我还通过设置一个global core.excludesfile全局忽略所有存储库中的.ds_存储。
首先,创建文件(如果文件不存在):
1 | touch ~/.gitignore |
然后添加以下行并保存:
1 | .DS_Store |
现在配置git以全局尊重该文件:
1 | git config --global core.excludesfile ~/.gitignore |
我发现,snipplr的以下行在擦除所有
1 | find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print |
和上面提到的一样,将
这将起作用:
1 | find . -name"*.DS_Store" -type f -exec git-rm {} \; |
删除名称以
出于某种原因,上面的任何一个都不能在我的Mac上工作。
我的解决方案来自终端运行:
1 | rm .DS_Store |
然后运行以下命令:
1 | git pull origin master |
我参加聚会有点晚了,但我有一个很好的答案。要删除.ds_存储文件,请使用终端窗口中的以下命令,但要非常小心地删除带有"find"的文件。使用带有-name选项的特定名称是使用该名称的安全方法之一:
1 2 | cd directory/above/affected/workareas find . -name .DS_Store -delete |
如果您想简单地在前面和后面列出它们,可以不使用"-delete"。那会让你放心他们已经走了。
关于~/.gitignore_的全球建议:这里要小心。你想把这个好文件放到.gitignore中每个工作区的顶层并提交它,以便克隆您的repo的任何人都能从中受益。
初始化存储库时,跳过包含
1 | -u |
这不应该是个问题。
这对我很有用,上面两个答案的组合:
- $git rm--缓存的-f*.ds存储
- $git commit-m"filter branch--索引筛选器"git rm--缓存--忽略unmatch.ds_存储"
- $git push origin master--强制
1 2 | $ git commit -m"filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store" $ git push origin master --force |
将此添加到文件中。gitignore
1 2 | #Ignore folder mac .DS_Store |
保存并提交
1 2 | git add -A git commit -m"ignore .DS_Store" |
现在你对所有的承诺都视而不见
删除忽略的文件:
(DS.Stand)
1 | $ find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch |
有几个解决方案可以解决这个问题。为了避免创建.ds_存储文件,不要使用OS X查找工具查看文件夹。查看文件夹的另一种方法是使用unix命令行。要删除.ds_store文件,可以使用名为ds_store terminator的第三方产品。要从整个系统中删除.ds_存储文件,可以使用unix shell命令。从应用程序启动终端:实用程序在unix shell提示下,输入以下unix命令:sudo find/-name".ds_store"-depth-exec rm_当提示输入密码时,请输入Mac OS X管理员密码。
此命令用于查找和删除从文件系统根目录(/)到整个计算机的所有.ds_存储区。要将此命令配置为作为计划任务运行,请执行以下步骤:从应用程序启动终端:实用程序在unix shell提示下,输入以下unix命令:
SUDO CRONATAB-E当提示输入密码时,请输入Mac OS X管理员密码。在vi编辑器中按一次键盘上的字母i,然后输入以下内容:
15 1***根查找/-name".ds_store"-depth-exec rm
这称为crontab entry,其格式如下:
minute hour dayofmonth month dayofweek用户命令。
crontab条目意味着系统将在每天凌晨1:15由名为root的帐户自动执行该命令。
命令从find开始一直到。如果系统未运行,则不会执行此命令。
要保存条目,请按一次Esc键,然后同时按Shift+Z+Z。
注意:步骤4中的信息仅用于vi编辑器。