1

Git全局递归忽略.DS_Store

 2 years ago
source link: http://chen-tao.github.io/2017/09/24/Git%E5%85%A8%E5%B1%80%E9%80%92%E5%BD%92%E5%BF%BD%E7%95%A5-DS-Store/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Mac下,只要在Finder访问过的文件夹,都会生成一个.DS_Store的文件,Mac用它来存储当前文件夹的一些Meta信息。对于Git来说,不经意间总是会干扰到其他正常的提交和本地仓库状态,是很烦恼,找了半天,终于有一个比较好的办法处理了

流程大致是这样的:

对于项目内已经提交了.DS_Store到仓库的情况

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

搜索一下项目内所有的.DS_Store,全部rm掉,然后再push一把

对于今后的项目,做全局的配置

如果没有~/. gitignore_global文件,echo也会为你生成一个,这里的主要目的是覆盖所有可能的OS X版本生成的.DS_Store,逐一执行一次就可以了,之后cat一下看是否正常写入了

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

大功告成~

另外,Github还提供了一个官方的全局示例,可以根据实际需求使用:

最后补充一下.gitignore的语法

gitignore规范

  • 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
  • 可以使用标准的 glob 模式匹配。
  • 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
  • 要忽略指定模式以外的文件或目录,可以在模式前加上(!)取反。

glob模式要点

  • *:任意个任意字符,
  • []:匹配任何一个在方括号中的字符,
  • ?:匹配一个任意字符,
  • [0-9]:匹配字符范围内所有字符

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK