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

我该如何修复?


当前回答

如果.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文件中,然后再次提交并推送最后两段代码(gitcommit…,gitpush…)

其他回答

如果.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文件中,然后再次提交并推送最后两段代码(gitcommit…,gitpush…)

我认为您遇到的问题是,在之前的一些提交中,您意外地将.DS_Store文件添加到了存储库中。当然,一旦在存储库中跟踪了某个文件,即使它与适用的.gitignore文件中的条目相匹配,也将继续跟踪该文件。

您必须手动删除添加到存储库中的.DS_Store文件。您可以使用

git rm --cached .DS_Store

删除后,git应该忽略它。您只需要在root.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

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

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

**/.DS_Store

来自git文档

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

将子目录的**/.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

.gitignore文件应如下所示:

# Ignore Mac DS_Store files
.DS_Store

只要不包含斜线,它将与所有目录中的文件名匹配。(从这里开始)