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

1727

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


7
请查看:http://www.aorensoftware.com/blog/2011/12/24/death-to-ds_store/ - kenorb
这在许多版本的 MacOS 中都是一样的,不仅仅是 Mac OS X。 - Jim Aho
32个回答

4

以下是我从以上两个答案中结合起来的方法,对我有用:

  • $ git rm --cached -f *.DS_Store
  • $ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store'"
  • $ git push origin master --force
这些命令可以过滤掉.DS_Store文件,然后提交并强制推送到远程主分支。

4

在初始化您的存储库时,请跳过包含git命令的步骤。

-u

这不应该是一个问题。


1
如果是其他人创建了仓库,而 OP 只是在同步更新,那该怎么办? - jww

4
使用命令touch .gitignore创建一个.gitignore文件,并在其中添加以下内容。
.DS_Store

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


3
$ git commit -m "filter-branch --index-filter 'git rm --cached --ignore-unmatch .DS_Store"
$ git push origin master --force

3

将此内容添加到您的 .gitignore 文件中。

#Ignore folder mac
.DS_Store

保存这个并进行提交

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

现在,您需要忽略所有提交中的此内容。

3

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

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

.gitignore

在你的应用的根目录中,只需写入

.DS_Store
._.DS_Store
**/.DS_Store
**/._.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...)进行提交和推送。
其他解决方案:
如果已经提交了.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

2
不需要在本地删除.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

1
有几种解决方法来解决这个问题。 要避免创建.DS_Store文件,请不要使用OS X Finder查看文件夹。查看文件夹的另一种方法是使用UNIX命令行。 可以使用第三方产品DS_Store终结者来删除.DS_Store文件。 可以使用UNIX shell命令从整个系统中删除.DS_Store文件。 从应用程序:实用工具启动终端 在UNIX shell提示符下输入以下UNIX命令: sudo find / -name ".DS_Store" -depth -exec rm {} \; 在提示输入密码时,输入Mac OS X管理员密码。
此命令是为了查找和删除整个机器上从根(/)开始的所有.DS_Store出现。 要将此命令配置为定期任务,请按照以下步骤操作: 从应用程序:实用工具启动终端 在UNIX shell提示符下输入以下UNIX命令:
sudo crontab -e 在提示输入密码时,输入Mac OS X管理员密码。 进入vi编辑器后,请按一次键盘上的I键,然后输入以下内容:
15 1 * * * root find / -name ".DS_Store" -depth -exec rm {} \;
这称为crontab条目,其格式如下:
分钟 小时 月份中的日期 月份 周中的日期 用户 命令。
crontab条目表示该命令将由名为root的帐户在每天早上1:15自动执行。 该命令从find开始直到结束。如果系统未运行此命令,则不会执行。 要保存条目,请按一次Esc键,然后同时按Shift + z + z。
注意:步骤4中的信息仅适用于vi编辑器。

0

对于那些以上方法都没有帮助的人 - 尝试更彻底地检查你的 .gitignore 文件,它可能在目录和子目录之间有一些规则组合,以便这些烦人的 .DS_Store 文件不仅在这些文件夹中被忽略。例如,您想忽略 gensrc 文件夹,除了在 custom 目录中的文件夹,那么您将拥有以下的 .gitignore 文件:

.DS_Store
gensrc
!custom/**

所以,使用这个设置,任何路径下的.DS_Store都会被忽略,但不包括custom/gensrc/.DS_Store。解决方法是将.DS_Store条目移动到.gitignore文件的底部。

0
我找到了一个简洁的方法来彻底摆脱这个问题,通过全局的.gitignore文件,因此你将永远不再需要这个线程。
git config --global core.excludesfile "~/.gitignore" &&  echo .DS_Store >> ~/.gitignore

这个一行代码创建了一个全局的.gitignore文件,用于每个仓库以及将来创建的所有新仓库,并完全忽略.DS_Store文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接