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


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


942
2017-09-20 09:15


起源


看到: aorensoftware.com/blog/2011/12/24/death-to-ds_store - kenorb


答案:


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

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

添加行

.DS_Store

到文件 .gitignore,可以在您的存储库的顶层找到(或者如果它已经存在则创建)。您可以使用top目录中的此命令轻松完成此操作

echo .DS_Store >> .gitignore

然后

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

1820
2017-09-20 11:18



这真是微不足道,但使用 -exec 将推出 git-rm 一次为每个.DS_Store文件,而 xargs 将所有路径放在一个命令行上。我更喜欢 xargs 因为我不必担心逃避很多特殊字符。 - benzado
这应该使用.git / info / exclude,而不是.gitignore。看到 stackoverflow.com/questions/1753070/... 为了解释两者之间的差异。 - Andrew Grimm
@Andrew:我不同意。对于.DS_Store文件进行检入永远不会有用,因此作为存储库范围的所有用户设置更有意义,而不是每个Mac用户需要记住在自己的机器上设置的内容。 - benzado
添加 .DS_Store 至 .gitignore 递归工作?也就是说,它会忽略 some/level/of/folders/.DS_Store 还有? - Charlie Schliesser
@CharlieS是的,如果模式不包含斜杠,则它与所有目录中的文件名匹配。 - benzado


结合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

211
2017-07-14 23:42



我发现在我的主目录中使用git repo时(AKA是一个“dotfiles”repo),有 ~/.gitignore 因为我的全局排除文件是一种痛苦。有些文件我想从我的主目录中排除 别 想要全球忽视。我用 ~/.gitexcludes 而是通过相同的指令: core.excludesfile - AL the X


解决此问题的最佳解决方案是全局忽略系统上所有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

编辑:

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


118
2017-07-13 08:03



您还可以在存储库的.gitignore中添加上述规则。如果您的项目有多个贡献者,这将在repo级别保留这些文件。但是,在这种情况下,如果不同的开发人员使用不同的操作系统,.gitignore应该处理每个操作系统的特定文件等。像linux,OSX等规则一样 - Nerve
我建议每个开发人员在他自己的.global_ignore中处理他的特定于os的文件,这样项目.gitignore就是项目特定的。 - mcfedr
必须运行:git add .gitignore_global,以便其他程序员在他的本地环境中也拥有该文件? - stackdave


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

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

(或您选择的任何文件)

然后像repo的.gitignore一样编辑文件。请注意,我认为您必须使用绝对路径。


51
2017-09-20 13:08





我不得不在上面将git-rm更改为git rm以使其工作:

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

13
2017-07-20 14:05





如果由于进行了更改而无法删除文件,请使用:

git rm --cached -f *.DS_Store

11
2018-05-12 00:21





打开终端并输入“cd <ProjectPath>”

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

  2. nano .gitignore

  3. 加上这个 .DS_Store

  4. 输入“ctrl + x”

  5. 输入“y”

  6. 输入以保存文件

  7. git add .gitignore

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


10
2017-11-24 09:30



nano .gitignore 如果不存在则创建文件,该命令应从项目根文件夹执行 - Saif