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

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

925459 次浏览

这将工作:

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

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

使用git-rm删除它们,然后将.DS_Store添加到.gitignore以阻止它们再次添加。您也可以使用收获蓝来阻止它们一起创建

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

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

添加这一行:

.DS_Store

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

echo .DS_Store >> .gitignore

然后将文件提交到repo:

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

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

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

(或您选择的任何文件)

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

我发现Snipplr中的以下行在擦除所有.DS_Store方面做得最好,包括一个具有本地修改的行。

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

--cached选项,保留您的本地.DS_Store,因为它无论如何都会被复制。

就像上面提到的那样,将.DS_Store添加到项目根目录的. gitignore文件中。然后它将不再在您的视线中(存储区)。

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

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

结合benzado和webmat的答案,使用git rm更新,在发现不在repo中的文件上不失败,并使其可粘贴到任何用户:

# remove any existing files from the repo, skipping over ones not in repofind . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch# specify a global exclusion listgit config --global core.excludesfile ~/.gitignore# adding .DS_Store to that listecho .DS_Store >> ~/.gitignore

以下操作最适合我。处理不匹配的文件和本地修改的文件。作为参考,这是在运行git1.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
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"$ git push origin master --force

有几个解决方案可以解决这个问题。为避免创建.DS_Store文件,请勿使用OS X Finder查看文件夹。查看文件夹的另一种方法是使用UNIX命令行。要删除.DS_Store文件,可以使用名为DS_Store终结者的第三方产品。要从整个系统中删除.DS_Store文件,可以使用UNIX shell命令。从应用程序启动终端:实用程序在UNIX shell提示符处输入以下UNIX命令:sudo查找/-name".DS_Store"-深度-exec rm{}\;当提示输入密码时,输入Mac OS X管理员密码。

此命令用于查找并删除从文件系统的根(/)开始到整个机器的所有.DS_Store。要将此命令配置为作为计划任务运行,请执行以下步骤:从应用程序启动终端:实用程序在UNIX shell提示符处输入以下UNIX命令:

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

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

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

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

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

命令从查找开始一直到。如果系统不运行此命令将不会执行。

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

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

出于某种原因,上面的方法都不适用于我的Mac。

我的解决方案来自终端运行:

rm .DS_Store

然后运行以下命令:

git pull origin master

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

现在,将此文件添加到您的全局git配置中:

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

编辑:

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

初始化存储库时,跳过包含

-u

这不应该是一个问题。

如果您无法删除文件,因为它们已分阶段更改,请使用:

git rm --cached -f *.DS_Store

这对我很有效,上面有两个答案:

  • #DS_Store
  • $git提交-m"filter分支--index-filter'git rm--缓存--忽略不匹配。DS_Store"
  • $git推送源大师--force

将此添加到您的文件. gitignore

#Ignore folder mac.DS_Store

保存这个并做出承诺

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

而现在你忽略了你所有的承诺

打开终端并输入“cd

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

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

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

然后将.DS_Store添加到.gitignore

顶级投票的答案很棒,但是帮助像我这样的新手,这里是如何创建. gitignore文件,编辑它,保存它,删除你可能已经添加到git的文件,然后将文件推送到Github。

创建. gitignore文件

要创建. gitignore文件,您只需将创建具有指定名称的空白文件的文件touch。我们要创建名为. gitignore的文件,以便我们可以使用命令:

touch .gitignore

忽略文件

现在您必须将告诉git忽略DS Store文件的行添加到您的. gitignore。您可以使用纳米编辑器执行此操作。

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

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

cd directory/above/affected/workareasfind . -name .DS_Store -delete

如果你想简单地列出它们的前后,你可以省略“删除”。这会让你放心,他们已经走了。

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

删除忽略的文件:

(DS_Store)

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

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


如果已经提交DS_Store:

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

忽略它们:

echo ".DS_Store" >> ~/.gitignore_globalecho "._.DS_Store" >> ~/.gitignore_globalecho "**/.DS_Store" >> ~/.gitignore_globalecho "**/._.DS_Store" >> ~/.gitignore_globalgit config --global core.excludesfile ~/.gitignore_global

无需在本地删除.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

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

并在其中添加以下行

.DS_Store

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

永远删除此文件的最佳方法:

创建一个全局.gitignore文件:

echo .DS_Store >> ~/.gitignore_global

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

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

.DS_Store将在所有存储库中被忽略。

我做了:

git checkout -- ../.DS_Store

(#将本地更改(永久)丢弃到文件)一切顺利!

步骤1

这将删除目录中的每个.DS_Store文件(包括子目录)

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

步骤2

将其添加到.gitignore以防止根目录每个子目录中的任何DS_Store文件转到git!

**/.DS_Store

git文档

  • 前导“**”后跟斜杠表示在所有目录中匹配。例如,“**/foo”匹配任何地方的文件或目录“foo”,与模式“foo”相同。“**/foo/bar”匹配目录“foo”下的任何地方的文件或目录“bar”。

有时。DS_Store文件在远程存储库中,但在本地项目文件夹中不可见。要解决此问题,我们需要删除所有缓存文件并再次添加。

步骤1:将其添加到. gitignore文件。

# Ignore Mac DS_Store files.DS_Store**/.DS_Store

步骤2:删除缓存的文件并使用这些命令再次添加。

git rm -r --cached .git add .git commit -am "Removed git ignored files"git push -f origin master

对于那些没有得到上述任何方法帮助的人-尝试更彻底地检查您的. g忽略,它可能在目录和子目录之间有一些规则组合,因此烦人的<强>DS_Store文件不会仅在这些文件夹中被忽略。例如,您想忽略gens rc文件夹,除了自定义目录中的文件夹,所以您将有以下. g忽略

.DS_Storegensrc!custom/**

因此,忽略此设置任何/path/.DS_Store,但不是自定义DS_Store,修复将<强>DS_Store条目移动到. g忽略文件的底部。