我已将.DS_Store添加到.gitignore文件中,但似乎它只是忽略根目录中的.DS_Store,而不是忽略每个文件夹和子文件夹中的.DS_Store。
我该如何解决?
我已将.DS_Store添加到.gitignore文件中,但似乎它只是忽略根目录中的.DS_Store,而不是忽略每个文件夹和子文件夹中的.DS_Store。
我该如何解决?
Answers:
我认为您遇到的问题是,在较早的提交中,您不小心将.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
添加**/.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
git rm --cached your_file
首先使用
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
从:stackoverflow.com/questions/18393498/...
-f
如果您在relavent文件夹中打开了文件,则似乎需要添加:find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
如果.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文件中,然后再次提交并推送最后2条代码(git commit ...,git push ...)
*
还是**
取决于您要实现的目标。这是一种告诉Shell如何导航目录的方法。这个stackoverflow答案完全说明了stackoverflow.com/a/28199633/4092170