.gitignore每个文件夹和子文件夹中的所有.DS_Store文件

vic*_*qiu 500 gitignore

我已将.DS_Store添加到.gitignore文件中,但似乎它只忽略根目录中的.DS_Store,而不是每个文件夹和子文件夹.

我该如何解决?

Edw*_*ell 594

我认为你遇到的问题是,在一些早期的提交中,你不小心将.DS_Store文件添加到了存储库.当然,一旦在您的存储库中跟踪文件,即使它与适用的.gitignore文件中的条目匹配,它也将继续被跟踪.

您必须手动删除已添加到存储库的.DS_Store文件.你可以用git rm --cached .DS_Store.删除后,git应该忽略它.您应该只需要根.gitignore文件中的以下行:.DS_Store.不要忘记这个时期!

git rm --cached .DS_Store仅从.DS_Store当前目录中删除.您可以使用从存储库中find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch删除所有内容.DS_Stores.

感觉提示:因为您可能永远不想包含.DS_Store文件,所以制定全局规则.首先,在某处创建一个全局.gitignore文件,例如echo .DS_Store >> ~/.gitignore_global.现在告诉git将它用于所有存储库:git config --global core.excludesfile ~/.gitignore_global.

这个页面帮助我回答了你的问题:https://help.github.com/articles/ignoring-files

  • ''rm rm --cached .DS_Store''从当前目录中只删除一个.DS_Store.用''找到.-name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch''从repo中删除所有.DS_Stores (69认同)
  • 最后两段回答了这个问题.谢谢. (40认同)
  • 我不同意你的看法.(尽管我认为它很有见地,但我赞成你的评论.)如果我们做全球化,那么每个mac用户都需要这样做,但只需要一次.如果我们在存储库范围内,那么我们需要为每个存储库执行此操作.我不了解你,但我一直在做新的回购.通过全球化,人们可以一劳永逸地解决问题. (15认同)
  • 使用全局规则的坏主意IMO:尝试维护跨多个用户/机器的全局配置永远不会起作用 - 您希望管理repo本身的repo的规则.[同意这一点](http://stackoverflow.com/questions/107701/how-can-i-remove-ds-store-files-from-a-git-repository#comment1897703_107921) (13认同)
  • 要忽略的其他常见文件列表可能很方便 (4认同)
  • 很棒的答案!不建议全局忽略,因为很难团队协作。 (2认同)
  • 使用“查找”。-name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f`如果您已经暂存了一些 .DS_Store 文件。 (2认同)
  • 它可以工作,到今天为止只缺少几个标签才能使其工作。我将它用于“.idea”文件夹。这里唯一添加的是我需要添加的 -r -f 标签。我希望它有帮助: # find . -名称.idea -print0 | xargs -0 git rm -r -f --忽略不匹配 (2认同)

ron*_*192 330

添加**/.DS_Store.gitignore子目录


如果.DS_Store已经提交:

find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
Run Code Online (Sandbox Code Playgroud)

在所有存储库中忽略它们:(有时它命名._.DS_Store)

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
Run Code Online (Sandbox Code Playgroud)

  • 这是问题的正确答案. (14认同)
  • @FreddySidauruk 首先使用 `git rm --cached your_file` (2认同)
  • 如果您在相关文件夹中打开了文件:“find . -name .DS_Store -print0 | xargs -0 git rm -f --忽略不匹配` (2认同)

drj*_*nco 100

如果.DS_Store从未添加到您的git存储库,只需将其添加到.gitignore文件即可.

如果没有,请创建一个名为的文件

.gitignore
Run Code Online (Sandbox Code Playgroud)

在您的应用程序的根目录中,只需编写

**/.DS_Store
Run Code Online (Sandbox Code Playgroud)

在里面.这永远不会允许.DS_Store文件潜入你的git.

但是,如果它已经存在,请在您的终端中写入:

find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
Run Code Online (Sandbox Code Playgroud)

然后提交并推送更改以从远程仓库中删除.DS_Store:

git commit -m "Remove .DS_Store from everywhere"

git push origin master
Run Code Online (Sandbox Code Playgroud)

现在将.DS_Store添加到.gitignore文件中,然后再次提交并推送最后两段代码(git commit ...,git push ...)

  • 为什么要使用双星号?这意味着什么? (2认同)
  • @MilanG 这是一个关键字,基本上意味着“在此目录和所有子目录中搜索”。 (2认同)

Yar*_*rin 81

您的.gitignore文件应如下所示:

# Ignore Mac DS_Store files
.DS_Store
Run Code Online (Sandbox Code Playgroud)

只要不包含斜杠,它就会与所有目录中的文件名匹配.(从这里)

  • @FreddySidauruk那么你必须运行 `git rm --cached path/to/file/here` (3认同)

use*_*745 42

只需将其放在新的一行中 .gitignore

**/.DS_Store
Run Code Online (Sandbox Code Playgroud)

来自git 文档

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

  • 正如您引用的文档中所述,“**/.DS_Store”只是“.DS_Store”的一种更复杂的编写方式。当您想要 gitignore 特定路径模式(无论它出现在何处)时,只需要双星。例如,只有在“foo”子目录中找到“**/foo/.DS_Store”文件时才会隐藏“.DS_Store”文件(无论“foo”在哪里)。 (8认同)
  • @orlp 一直都是这样吗?我发誓我已经将 .DS_Store 添加到 .gitignore 一百万次,只是为了让 .DS_Store 出现在子目录中。经过测试您的信息后,看来您是完全正确的。它改变了我对这个问题的看法。但更普遍的是:存在意外忽略子目录中恰好与其他地方故意忽略的另一个文件同名的文件的(高)风险。对于 git 来说,这样的行为似乎很糟糕(尽管很方便)。感谢您指出。 (3认同)

tra*_*nes 23

第1步,删除所有*.DS_store文件.一个人可以跑

git rm -f *.DS_Store
Run Code Online (Sandbox Code Playgroud)

但请注意,rm -f如果您有拼写错误,可能会有点危险!第二步:添加

*.DS_Store
.DS_Store
Run Code Online (Sandbox Code Playgroud)

到.gitignore.这对我有用!


小智 11

您还可以将--cached标志添加到auco的答案中以维护本地.DS_store文件,正如Edward Newell在其原始答案中提到的那样.修改后的命令看起来像这样:find . -name .DS_Store -print0 | xargs -0 git rm --cached --ignore-unmatch..表示谢谢!


小智 10

添加*.DS_Store到.gitignore文件.这完全适合我


mat*_*zdz 7

  1. $ git rm ./*.DS_Store- 从 git 中删除所有 .DS_Store
  2. $ echo \.DS_Store >> .gitignore- 将来忽略.DS_Store

提交和推送


Kir*_*nee 6

您应该在创建项目时添加以下行。它总是会忽略.DS_Store被推送到存储库。

*.DS_Store这将在代码提交时忽略 .DS_Store。
git rm --cached .DS_Store这是从存储库中删除 .DS_Store 文件,如果需要,可以取消注释。

## ignore .DS_Store file.
# git rm --cached .DS_Store
*.DS_Store
Run Code Online (Sandbox Code Playgroud)


小智 5

步骤:1)使用此命令删除现有文件

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

步骤:2)在.gitignore文件中添加.DS_Store

步骤:3)在.gitignore中提交您的更改git add .gitignore git commit -m"removed .DS_Store"