726

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

我该如何解决?

4

11 回答 11

857

我认为您遇到的问题是,在一些较早的提交中,您不小心将.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

这个页面帮助我回答了你的问题。

于 2013-10-10T15:22:38.913 回答
414

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


如果.DS_Store已经提交:

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

在所有存储库中忽略它们:(有时它命名为._.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
于 2014-10-19T20:21:14.043 回答
210

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

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

.gitignore

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

**/.DS_Store

在里面。这绝不会允许 .DS_Store 文件潜入您的 git。

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

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

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

git commit -m "Remove .DS_Store from everywhere"

git push origin master

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

于 2016-08-05T20:29:21.170 回答
98

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

# Ignore Mac DS_Store files
.DS_Store

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

于 2015-03-25T16:06:19.353 回答
51

只需将其放在新行中.gitignore

**/.DS_Store

来自git 文档

  • 前导“**”后跟斜杠表示在所有目录中都匹配。例如,“**/foo”匹配任何地方的文件或目录“foo”,与模式“foo”相同。"**/foo/bar" 匹配文件或目录 "bar" 直接位于目录 "foo" 下的任何位置。
于 2020-08-21T05:31:12.250 回答
27

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

git rm -f *.DS_Store

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

*.DS_Store
.DS_Store

到.gitignore。这对我有用!

于 2016-01-12T19:42:23.913 回答
14

添加*.DS_Store到您的 .gitignore 文件中。这对我来说非常有用

于 2015-02-04T07:47:37.490 回答
13

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

于 2014-10-04T05:48:10.690 回答
7

步骤: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" 中提交您的更改

于 2017-07-28T09:09:40.463 回答
5
  1. $ git rm ./*.DS_Store- 从 git 中删除所有 .DS_Store
  2. $ echo \.DS_Store >> .gitignore- 以后忽略 .DS_Store

提交和推送

于 2019-02-15T18:58:43.173 回答
4

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

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

## ignore .DS_Store file.
# git rm --cached .DS_Store
*.DS_Store
于 2020-07-30T04:52:16.607 回答