Mac中Git如何忽略.DS_Store文件

Mac中Git如何忽略.DS_Store文件OpenHarmony 布道师 InfoQ 签约作者 CSDN 博客专家 华为云享专家 阿里云专家博主 51CTO 博客首席体验官 开源项目 GVA 成员之一 专注于大前端技术的分享 包括 Flutter 鸿蒙 小程序 安卓 VUE JavaScript

欢迎大家来到IT世界,在知识的湖畔探索吧!

Mac中Git如何忽略.DS_Store文件

作者:坚果

公众号:”大前端之旅”

OpenHarmony布道师,InfoQ签约作者,CSDN博客专家,华为云享专家,阿里云专家博主,51CTO博客首席体验官,开源项目GVA成员之一,专注于大前端技术的分享,包括Flutter,鸿蒙,小程序,安卓,VUE,JavaScript。

视频教程

Mac中Git如何忽略.DS_Store文件

Git中多出来的.DS_Store

由于我是第一次使用mac,发现每次git上传时会多出来.DS_Store文件,虽然不清楚具体做什么,但看上去并没什么问题。git一般也是自己一个人单机使用,就算换机也一般是直接换,没有遇到过两个同时使用的时候,上传.DS_Store也就默认都上传了。

但最近用两个mac工作,就发现了问题,一个mac提交了修改,第二个mac想要拉下来时居然遇到了.DS_Store文件被修改过需要提交再merge。所以这个.DS_Store是什么鬼?

.DS_Store

.DS_Store 文件,是用于存放目录自定义属性(如图表、位置属性)等元数据信息的系统文件,由 Finder 自动创建。虽然所有 . 开头的文件/文件夹默认隐藏(可以使用 Command + Shift + . 显示所有隐藏文件),平时我们看不见,也不影响使用,但是 Git 仍会将其记录下来,即便我只是在同目录下移动文件。所以为了防止某些信息不经意间泄露出来,建议使用某些手段使 Git 忽略 .DS_Store 文件。

Git中处理方案

方案一:项目设置.gitignore

仅针对git的处理最先想到就是设置.gitignore文件。

.gitignore文件用于忽略文件,规范如下:

  • 所有空行或者以注释符号 # 开头的行都会被 Git 忽略
  • 可以使用标准的 glob 模式匹配
  • 匹配模式最后跟反斜杠(/)说明要忽略的是目录
  • 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反
  • 第一个 / 会匹配路径的根目录,举个栗子,”/*.html”会匹配”index.html”,而不是”d/index.html”。
  • 通配符 * 匹配任意个任意字符,? 匹配一个任意字符。需要注意的是通配符不会匹配文件路径中的 /,举个栗子,”d/*.html”会匹配”d/index.html”,但不会匹配”d/a/b/c/index.html”。
  • 两个连续的星号
  • 有特殊含义:
    • / 开头表示匹配所有的文件夹,例如 /test.md 匹配所有的test.md文件。
    • / 结尾表示匹配文件夹内所有内容,例如 a/ 匹配文件夹a中所有内容。
    • 连续星号 前后分别被 / 夹住表示匹配0或者多层文件夹,例如 a//b 匹配到 a/ba/x/ba/x/y/b 等。
  • 前缀 ! 的模式表示如果前面匹配到被忽略,则重新添加回来。如果匹配到的父文件夹还是忽略状态,该文件还是保持忽略状态。如果路径名第一个字符为 ! ,则需要在前面增加 \ 进行转义。

对于一些常用的系统、工程文件的.gitignore文件可以参考这个网站进行设置,这里有很多模板。

针对.DS_Store文件,在git工程文件夹中新建.gitignore文件,在文件中设置:

.DS_Store /.DS_Store .DS_Store?

欢迎大家来到IT世界,在知识的湖畔探索吧!

对于已经提交的内容,希望git能够忽略,但同时并不会删除本地文件,需要在控制台输入以下命令:

欢迎大家来到IT世界,在知识的湖畔探索吧!git rm -r --cached $file_path

方案二:全局设置忽略

虽然每个项目配.gitignore文件可以成功,但是每个项目都需要配置就有点烦了。我们可以在git的全局进行配置来忽略.DS_Store文件。

设置之前我们先看下现在的git config配置情况

git config --list

实际上git配置情况可以在 ~/.gitconfig 文件中查看。

欢迎大家来到IT世界,在知识的湖畔探索吧!vi ~/.gitconfig

通过 :q! 退出后,我们需要建立一个文件,把需要全局忽略的文件路径写入其中。该文件起名为.gitignore_global:

打开终端,在某一个位置创建 .gitignore_global 文件(建议在当前用户目录下)

touch ~/.gitignore_global

打开文件

vi ~/.gitconfig

或者

open ~/.gitignore_global

修改该文件,填入与上方 .gitignore 示例一样的内容

.DS_Store /.DS_Store .DS_Store?

然后对git进行全局设置,让git忽略.gitignore_global中的所有文件:

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

这样就不用每个git目录都设置忽略.DS_Store文件了!

此时终端输入:

git config --list

如果发现这两行:

Mac中Git如何忽略.DS_Store文件

[core] excludesfile = /Users/[username]/.gitignore_global

就说明已经添加成功了,以后 Git 就不会再记录 .DS_Store 了。

批量移除已有的 .DS_Store

即便后续不会再记录,仓库中的 .DS_Store 都还在,需要手动删除。

终端进入仓库目录,输入:

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

这样就删除了所有该仓库的 .DS_Store 。重新提交推送即可。

参考链接:

  • gitignore all .DS_Store files:Stack Overflow 上的提问
  • 常用的系统、工程文件的.gitignore文件模版可以参考这个网站进行设置。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/86832.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们YX

mu99908888

在线咨询: 微信交谈

邮件:itzsgw@126.com

工作时间:时刻准备着!

关注微信