Git全局递归忽略.DS_Store(解决Mac下统一递归的忽略.DS_Store的方法)[亲测有效]

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

 流程大致是这样的:

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

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

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

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

1、如果没有~/.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

2、然后设置一下全局的配置

git config --global core.excludesfile ~/.gitignore_global

大功告成~

附1

1、删除当前目录下的所有的.DS_Store:

find . -name '*.DS_Store' -type f -delete

2、禁止.DS_store生成:

defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE

3、恢复.DS_store生成:

defaults delete com.apple.desktopservices DSDontWriteNetworkStores

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

最后补充一下.gitignore的语法

gitignore规范

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

glob模式要点

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

参考文章地址:Git全局递归忽略.DS_Store | Chen-Tao解决Mac下统一递归的忽略.DS_Store的方法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/ 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值