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


Answers:


2426

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

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

13
这确实很简单,但是使用该命令将为每个.DS_Store文件-exec启动git-rm一次,而xargs将所有路径放在一个命令行中。通常,我更喜欢xargs因为我不必担心转义许多特殊字符。
benzado

8
这应该使用.git / info / exclude,而不是.gitignore。有关两者之间差异的说明,请参见stackoverflow.com/questions/1753070/…
安德鲁·格林

106
@安德鲁:我不同意。签入.DS_Store文件永远不会有用,因此,它是整个存储库范围内所有用户的设置,而不是每个Mac用户都需要记住的在自己的计算机上进行设置的意义。
benzado

51
是否加入.DS_Store.gitignore工作递归?也就是说,它也会忽略some/level/of/folders/.DS_Store吗?
Charlie Schliesser 2012年

70
@CharlieS是的,如果模式不包含斜杠,则将其与所有目录中的文件名匹配。
benzado 2012年

239

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

2
我发现在我的主目录中使用git repo(也称为“ dotfiles” repo)时,使用~/.gitignore全局排除文件是一件很麻烦的事情。有文件,我想从我的主目录排除,我希望在全球范围忽略。我~/.gitexcludes改为通过同一指令使用:core.excludesfile
AL X

155

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

编辑:

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


您还可以在存储库的.gitignore中添加上述规则。如果您的项目有多个贡献者,这将使这些文件处于回购级别。但是,在这种情况下,如果不同的开发人员使用不同的操作系统,.gitignore应该处理每个操作系统的特定文件等。像适用于linux,OSX等的规则。–
神经

我建议每个开发人员在自己的.global_ignore中处理其操作系统特定的文件,这样项目.gitignore就是项目特定的。
mcfedr

必须运行:git add .gitignore_global,以便另一个程序员在他的本地环境中也有该文件?
stackdave

58

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

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

(或您选择的任何文件)

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



19

打开终端,然后键入“ 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.'


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

17

投票最高的答案很棒,但是可以像我这样帮助新手,这是如何创建.gitignore文件,对其进行编辑,保存,删除您可能已经添加到git的文件,然后将该文件推送到Github的方法。

创建.gitignore文件

要创建.gitignore文件,您只能使用touch创建具有指定名称的空白文件的文件。我们想要创建一个名为.gitignore的文件,因此我们可以使用以下命令:

touch .gitignore

忽略文件

现在,您必须在gitignore中添加告诉git忽略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!'


3
不需要您执行步骤中的touch命令... nano将为您创建文件。
科里·戈德堡

1
两年后,我找到了自己的答案并使用了它。过去我做得很好。:)
约书亚舞

完美地工作!谢谢
iUser

15

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

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

10

使用删除它们git-rm,然后添加.DS_Store .gitignore以阻止再次添加它们。您还可以使用blueharvest阻止它们一起创建


9

如果要将DS_Store文件删除到每个文件夹和子文件夹:


如果已提交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

8

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

查找并删除:

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

我还通过设置全局core.excludesfile来全局忽略所有存储库中的.DS_Store。

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

touch ~/.gitignore

然后添加以下行并保存:

.DS_Store

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

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

8

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

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

然后添加.DS_Store.gitignore


6

我发现snipplr的以下行最适合擦除所有内容.DS_Store,包括具有本地修改的内容。

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

--cached选项,保留您的本地信息,.DS_Store因为无论如何都会对其进行复制。

就像上面提到.DS_Store的,在项目的根目录下添加.gitignore文件。然后,它将不再在您的视线范围内。


5

我参加聚会有点晚了,但是我有一个很好的答案。要删除.DS_Store文件,请在终端窗口中使用以下命令,但要非常小心地使用'find'删除文件。使用带有-name选项的特定名称是更安全的使用方式之一:

cd directory/above/affected/workareas
find . -name .DS_Store -delete

如果只想在它们之前和之后列出它们,则可以省略“ -delete”。这样可以使您确信它们已经消失了。

关于〜/ .gitignore_global建议:在这里要小心。您想将该漂亮的文件放入每个工作区的顶层的.gitignore中并提交,以便克隆您的存储库的任何人都可以从使用它的好处中受益。


4

这将起作用:

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

它将删除所有名称以结尾的文件.DS_Store,包括._.DS_Store


3
星号不应在其中。
亚里斯多德·帕加尔兹

3
星号应该存在,因为我在Mac系统上找到了.DS_Store和._。DS_Store文件。
MutantMahesh 2014年

3
@MutantMahesh。在这种情况下,您需要"*.DS_Store",以便将星号传递给findshell而不是通过shell进行扩展。
TRiG

4

由于某种原因,以上都不适用于我的mac。

我的解决方案是从终端运行:

rm .DS_Store

然后运行以下命令:

git pull origin master

3
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force

3

初始化存储库时,请跳过包含以下内容的git命令:

-u

这不应该是一个问题。


1
如果其他人创建了该存储库,而OP仅与其同步,该怎么办?
jww

3

这对我有用,上面有两个答案的组合:

  • $ git rm-缓存-f * .DS_Store
  • $ git commit -m“过滤器分支--index-filter'git rm --cached --ignore-unmatch .DS_Store”
  • $ git push origin master --force

3

删除忽略的文件:

(.DS_Store)

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

2

有一些解决方案可以解决此问题。为避免创建.DS_Store文件,请勿使用OS X Finder查看文件夹。查看文件夹的另一种方法是使用UNIX命令行。要删除.DS_Store文件,可以使用称为DS_Store Terminator的第三方产品。要从整个系统中删除.DS_Store文件,可以使用UNIX shell命令。从Applications:Utilities启动终端在UNIX shell提示符下,输入以下UNIX命令:sudo find / -name“ .DS_Store” -depth -exec rm {} \; 当提示您输入密码时,输入Mac OS X管理员密码。

此命令是查找并删除从整个系统文件系统根目录(/)开始的所有.DS_Store实例。要将此命令配置为按计划的任务运行,请执行以下步骤:从Applications:Utilities启动终端在UNIX shell提示符下,输入以下UNIX命令:

sudo crontab -e提示输入密码时,输入Mac OS X管理员密码。进入vi编辑器后,按一次键盘上的字母I并输入以下内容:

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

这称为crontab条目,其格式如下:

分钟Hour DayOfMonth Month DayOfWeek用户命令。

crontab条目意味着该命令将由系统在每天的1:15 AM由名为root的帐户自动执行。

该命令从find一直到。如果系统未运行,则该命令将不会执行。

要保存条目,请按一次Esc键,然后同时按Shift + z + z。

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


2

将此添加到您的文件.gitignore

#Ignore folder mac
.DS_Store

保存并提交

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

现在您对所有提交都忽略了


2

.gitignore使用命令创建文件touch .gitignore

并在其中添加以下几行

.DS_Store

保存.gitignore文件,然后将其推送到您的git repo中。


2

永远摆脱此文件且再不必担心的最佳方法是

制作一个全局.gitignore文件:

回声.DS_Store >>〜/ .gitignore_global

并让git知道您想将此文件用于所有存储库:

git config --global core.excludesfile〜/ .gitignore_global就是这样!.DS_Store妨碍了您。


1

无需.DS_STORE本地删除

只需将其添加到.gitignore文件

.gitignore文件只是一个文本文件,它告诉Git项目中要忽略的文件或文件夹。

指令

  • nano .gitignore
  • .DS_Store然后单击CTRL+X > y > Hit Return
  • git status 最后看看您的更改
  • git add .gitignore
  • git commit -m 'YOUR COMMIT MESSAGE'
  • git push origin master
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.