如何从 Git 仓库中删除那些恼人的 Mac OS X .DS_Store
文件?
从版本库中删除现有文件。
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
添加一行
.DS_Store
到文件.gitignore
中,该文件可以在你的版本库的顶层找到(如果还没有的话,可以创建)。你可以在顶层目录中用这个命令轻松完成这个任务
echo .DS_Store >> .gitignore
然后
git add .gitignore
git commit -m '.DS_Store banished!'
结合benzado和webmat'的答案,用git rm
更新,对发现的不在repo中的文件不失效,并使其可供任何用户粘贴。
# remove any existing files from the repo, skipping over ones not in repo
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
# specify a global exclusion list
git config --global core.excludesfile ~/.gitignore
# adding .DS_Store to that list
echo .DS_Store >> ~/.gitignore
解决这个问题的最好办法是全局忽略系统中所有git仓库中的这些文件。 这可以通过创建一个全局的gitignore文件来实现,比如:
vi ~/.gitignore_global
。
vi ~/.gitignore_global
增加忽略文件的规则,如:
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
。
# Compiled source #
###################
*.com
*.class
*.dll
*.exe
*.o
*.so
# Packages #
############
# it's better to unpack these files and commit the raw source
# git has its own built in compression methods
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
# Logs and databases #
######################
*.log
*.sql
*.sqlite
# OS generated files #
######################
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
现在,将这个文件添加到全局 git 配置中。
git config --global core.excludesfile ~/.gitignore_global
编辑。
删除了图标,因为它们可能需要作为应用资产提交。
打开终端,输入"cd < ProjectPath >"。
删除现有文件。
find .DS_Store -name .DS_Store -print0 | xargs -0 git rm -find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
。
nano .gitignore
。
增加这个.DS_Store
。
输入"ctrl + x"。
输入"y"。
回车保存文件
git add .gitignore
。
git commit -m '.DS_Store removed.'
。
顶票的答案很赞,但帮助像我这样的菜鸟,下面是如何创建.gitignore文件,编辑它,保存它,删除你可能已经添加到git的文件,然后把文件推上Github。
创建.gitignore文件。
要创建一个.gitignore文件,你可以直接touch
文件,这样就会创建一个指定名称的空白文件。
我们要创建一个名为.gitignore的文件,所以我们可以使用这个命令。
touch .gitignore
。
忽略文件
现在,你必须在 .gitignore 中添加告诉 git 忽略 DS Store 文件的行。 你可以使用 nano 编辑器来完成这项工作。
nano .gitignore
。
Nano很好,因为它包含了如何摆脱它的说明。 (Ctrl-O 保存,Ctrl-X</kbd>。 退出)
复制并粘贴这个[Github gist][1]中的一些想法,其中列出了一些常见的文件,可以忽略。 要回答这个问题,最重要的是。
# OS generated files #
######################
.DS_Store
.DS_Store?
#是注释,将帮助你组织你的文件,因为它的增长。
这篇[Github文章][2]也有一些通用的想法和指南。
删除已经添加到git的文件。
最后,你需要真正从你的目录中删除那些DS Store文件。
使用这个来自投票最高的答案的伟大命令。 这将检查你目录中的所有文件夹,并从 git 中删除这些文件。
find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch
。
将.gitignore推到Github。
最后一步,你需要实际提交你的.gitignore文件。
git status
git add .gitignore
。
git commit -m '.DS_Store banished!'
。
[1]: https://gist.github.com/octocat/9257657 [2]: https://help.github.com/articles/ignoring-files/
如果你想删除每个文件夹和子文件夹的DS_Store文件。 <hr>.如果已经提交了DS_Store: 如果已经提交了DS_Store。
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch
忽略他们。
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
下面的方法对我来说效果最好。 处理不匹配的文件,以及本地修改的文件。 作为参考,这是在 Mac 10.7 系统上运行 git 1.7.4.4。
查找并删除。
find . -name .DS_Store -print0 | xargs -0 git rm --ignore-unmatch -f
我还通过设置全局的core.excludesfile来全局忽略所有仓库的.DS_Store。
首先,创建这个文件(如果还没有的话)。
touch ~/.gitignore
然后添加下面一行并保存。
.DS_Store
现在配置git为全局尊重文件。
git config --global core.excludesfile ~/.gitignore
我发现snipplr中的以下一行对擦除所有`.DS_Store'(包括有本地修改的)效果最好。
find . -depth -name '.DS_Store' -exec git-rm --cached '{}' \; -print
--缓存
选项,保留你的本地.DS_Store
,因为它还是会被复制。
就像上面提到的那样,把.DS_Store
添加到项目根部的.gitignore文件中。
这样它就不会再出现在你的视线中了(repos)。
1:
我'有点晚了,但我有一个很好的答案。 要删除.DS_Store文件,在终端窗口中使用以下命令,但要非常小心删除带有'find'的文件。 用-name选项使用特定的名称是比较安全的方法之一。
cd directory/above/affected/workareas
find . -name .DS_Store -delete
你可以不使用"-delete"。 如果你想简单地列出它们的前后。 这样你就可以放心了,它们'已经消失了。
关于~/.gitignore_global的建议。 这里要小心。 你想把那个漂亮的文件放到 .gitignore 中的 并将其提交给每个工作区的顶层,这样,任何克隆你的repo的人都将获得使用它的好处。
这将发挥作用。
find . -name "*.DS_Store" -type f -exec git-rm {} \;
它删除了所有名称以.DS_Store
结尾的文件,包括._.DS_Store
。
由于某些原因,上述方法在我的mac上都不起作用。
我的解决办法是在终端运行。
rm .DS_Store
然后运行以下命令。
git pull origin master
有几个解决方案可以解决这个问题。 为了避免创建.DS_Store文件,请不要使用OS X Finder来查看文件夹。 另一种查看文件夹的方法是使用UNIX命令行。 要删除.DS_Store文件,可以使用名为DS_Store Terminator的第三方产品。 要从整个系统中删除.DS_Store文件,可以使用UNIX shell命令。 从应用程序:实用程序中启动终端 在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条目,它的格式如下。
Minute Hour DayOfMonth Month DayOfWeek User Command。
crontab条目的意思是每天凌晨1:15系统会自动执行该命令,账户名为root。
该命令从find开始一直到\。 如果系统没有运行,这条命令将不会被执行。
要保存该条目,请按Esc键一次,然后同时按Shift + z+ z。
注意:步骤4中的信息是针对vi的。 步骤4中的信息只适用于vi编辑器。