查看原文
其他

【第346期】用对 gitignore

小胡子哥 前端早读课 2019-10-09

前言:

前一两个月,项目的代码版本管理方式由svn转换成git后,大家由不习惯到现在逐渐上手了,但在代码提交期间会往往认知不到位,把一些不必要的文件提交到版本库中,比如ide的配置,比如构建工具的依赖文件等等。这些都是可以通过配置不提交的。


这篇文章@胡子哥就来分享利用gitignore来做这件事情。


正文从这开始~


使用 git 做代码管理工具时,设置 gitignore 是必不可少的流程,一些系统或者 IDE 会在目录下生成与项目不相关的文件,而这些文件我们不期望被提交到仓库之中。理解 gitignore 的pattern 规则十分重要。


Pattern 规则

关于 Pattern 规则,可以查看 git 的相关文档:http://git-scm.com/docs/gitignore,大致有以下几点:

1)空行不匹配任何内容,所以可以作为块分隔符;

2)# 开头表示注释,如果相匹配 #,可以在前面加一个反斜杠,即 \#;

3)除非加了反斜杠,否则一连串的空格会被忽略;

4)如果在匹配的内容前面加上 !,则这些匹配过的部分将被移出,如果要匹配以 ! 开头的内容,需要加上反斜杠,如 \.txt;

5)如果一个匹配 pattern 后面有一个斜杠,如 foo/,则默认会匹配所有(包含父子文件夹)中的 foo 文件夹内容,并且它不会匹配单个的文件;

6)如果一个匹配 pattern 不包含斜杠,如 foo,Git 会将其作为一个 shell 的查找命令匹配内容。


需要注意的 **:

1)如果一个 pattern 以 ** 开头,如 **/foo,最后会匹配所有文件夹下的 foo 文件(夹);

2)如果一个 pattern 以 /** 开头,如 abc/**,则表示匹配 abc 目录下的所有内容;

3)如果一个 pattern 中间包含 **,如 a/**/b,则会匹配 a/b、a/x/b、a/x/y/b以及所有类似的内容。


gitignore 相关的问题

匹配示例

如果我们要匹配‘foo’目录下除去‘foo/bar/‘的内容,可以这样做:


如果要匹配所有目录下的 node_modules 文件夹,只需要这样做:


如果要匹配所有的 json 文件,可以这样做:


git 操作中,add 之后再加入 gitignore

Git 操作中经常会出现这样的问题,当我们 git add 之后,突然想起来要添加一个 gitignore 文件,但是一些诸如 node_modules/, cache/ 等文件已经被 add 进去了,这些文件不会被 ignore 掉,怎么办?


最直接的方式是:


git 添加空文件夹

Git 默认是不添加空文件夹的,如果一定要加入这个文件夹,有以下方案:

1)在文件夹添加文件,然后删除

2)在文件夹中添加一个 .gitkeep 文件


让 git 不要添加 gitignore 文件

如果在 .gitignore 文件中添加


你会发现,并没有起作用, .gitignore 文件依然被加到了 git 中,为什么会有这个需求呢?有些人在本地开发的时候有一些其他的文件夹名不愿意让别人看到,虽然在 gitignore 中被忽略了,但是 .gitignore 文件中依然可以看到这些文件夹名字。


其实没有什么好的办法处理这个问题,.gitignore 做多人协作开发的时候可以直接根据同一份 gitignore 过滤文件,如果一定要做,可以从 add 中在 remove 掉:


Git 操作涉及的命令巨多,但是日常开发中用到的就那么几个,把原理搞清楚,用起来得心应手。


后语:

说些跟本文无关的事情,周天理完发的时候,在微信朋友圈想了两个问题,一个是每个人对同一个名词的认知度不同,如何避免这种问题。第二是帮别人节省时间就是自己成长的机会。


第一个问题,抽象名字具象化。针对发型这件事情,要是在剪开始之前有图片可以看到,在一定程度上可以减少惊讶,至少在这过程中对结果还是有一个比较清晰的认知。


第二个问题,是在写8月份总结的时候提到的。这个也是很多创业公司的价值所在。现实中的产品就更多了,比如著名的hao123,现在很多聚合的产品等。等待机会不如创造机会。


长按图片识别图中二维码



    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存