PS:转自https://blog.csdn.net/o07sai/article/details/81043474

网上有好多gitignore的帖子,文章,都说很简单的。但是我怎么就用不好呢?

我们还是来研究一下吧。

先看看git版本

先看看我测试的工作目录下有哪些文件吧。

gitignore文件是空的,现在就是所有文件了。

我们把prj添加进去看看是什么效果吧:

现在只剩下一个文件了。说明所有名字是prj的文件和文件夹都忽略了,不管其目录的相对位置在哪。

再试试把/prj添加进来吧,网上说,/开头的指文件夹。看看对不对呢。

的确是文件夹,但只是仓库根目录下的prj文件夹被忽略了。那到底是开头/指文件夹,还是指目录呢?我把根目录的prj目录删除,新建一个prj文本文件。再来看看。

文件也被忽略了,说明开头的/,只是指定根目录,不管prj是文件夹还是文件,都是忽略的。

现在把工作目录还原,再把prj/ 写进gitignore看看。

并不是网上说的,不管prj位置在哪,都忽略其下的所有文件。事实告诉我,只把根目录下的prj文件夹里的所有忽略掉了。那和/prj/*有区别吗?没有!

来试试:

就是这样!

用通配符和不用通配符效果是一样的,那为什么还要写通配符呢?答案是,如果想把prj文件夹大多数文件都忽略,只有小部分文件不想忽略,就需要这个通配符了。并在后面添加不忽略的规则。前面添加!的规则。

可以看到效果了吧。

但是我xx子目录下面还有一个prj,里面也有类似的文件,也想和这一样来忽略怎么办呢?

在prj/*前面添加*来指定任意目录吗?来试试:

这样是不行的,其意思实际上是指,根目录下以prj结尾的文件夹忽略了。

那添加 */呢?再试试:

哎,都没有忽略!再来看看一种情况:

到此,应该明白了吧?

再看一例:

本来是想把相对路径符合xx/prj/的文件夹都忽略的,但没有用。

说明只要你在规则里写了路径,就是绝对路径,没有相对路径的

xx/prj/和prj/*是一样的道理,都表明了路径,开头加不加/,都表示“绝对路径”。

结论:

1.    开头的/并不是标识文件夹的,要表明仅忽略文件夹需要在名称后面添加/,而不是前面。

2.    要想忽略某文件夹,但其下部分文件不能忽略。则需要添加通配符*,然后在后面添加!开头的规则,来指出不忽略的文件或文件夹。

3.    只要写了路径,即/左右两边都有字符,那么就是指的“绝对路径”(相对仓库的,仓库.git文件夹所在目录为根目录),但可以用*来指定层级,指定第几层子目录下的某个文件夹。

4.    不忽略的规则只要写文件名或文件夹名(名称中可以加通配符)前面加!就可以了。会在上面有通配符忽略的列表里找到匹配项来不忽略(反忽略)它。

现在就坑爹了,我工程里不同层的子目录有相类似的目录需要忽略,并其中有部分不忽略,我就得知道那个子目录的层数。像我例子里的,我想把所有prj文件夹忽略,但其中的所有.s文件不忽略,我就得这样写:

如果我想写个通用模板,并不知道prj具体在哪一层,那就多写几条吧。

prj/*

*/prj/*

*/*/prj/*

*/*/*/prj/*

*/*/*/*/prj/*

...

补充:刚才试验,发现:.gitignore不仅可以写在.git所有文件夹,还可以写在子目录里。ignore文件里写的路径全是相对该ignore文件所在位置。这样一个复杂工程,就可以分模块写忽略文件了。这个挺好的。

补充2: 刚才在网上发现有大神提出 ** 表示任意层级目录,我就试了一下:

gitignore规则探究的更多相关文章

  1. Git忽略规则及.gitignore规则不生效的解决办法

    在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件).这个文件每一行保存了一个匹配的规则例如: # 此为注 ...

  2. .gitignore规则不生效的解决办法

    .gitignore规则不生效的解决办法 使用git 的时候,在.gitignore中已经添加了某个文件或者文件夹,但是使用git status还能看见该文件的修改提示--–说明.gitignore未 ...

  3. Android忽略文件以及.gitignore规则不生效的可行解决方案

    github官方的忽略规则:https://github.com/github/gitignore/blob/master/Android.gitignore 我司项目中的忽略规则: *.iml .g ...

  4. Git忽略规则和.gitignore规则不生效的解决办法

    Git忽略规则和.gitignore规则不生效的解决办法   Git忽略规则: 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如果 ...

  5. 【转载】Git忽略规则和.gitignore规则不生效的解决办法

    原文:https://www.cnblogs.com/zhangxiaoliu/p/6008038.html Git忽略规则: 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改 ...

  6. Git使用的一些问题:.gitignore规则不生效、git同步代码至github和gitee

    Git忽略规则及.gitignore规则不生效的解决办法 .gitignore 的基本使用 在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件 ...

  7. Git忽略.gitignore规则不生效的解决办法

    在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件). 这个文件每一行保存了一个匹配的规则例如: # 此为 ...

  8. Git忽略规则及.gitignore规则不生效的解决办法(转)

    在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件).这个文件每一行保存了一个匹配的规则例如: 1 2 3 ...

  9. [转]Git忽略规则及.gitignore规则不生效的解决办法

    在git中如果想忽略掉某个文件,不让这个文件提交到版本库中,可以使用修改根目录中 .gitignore 文件的方法(如无,则需自己手工建立此文件).这个文件每一行保存了一个匹配的规则例如: # 此为注 ...

随机推荐

  1. 修改注册表信息来兼容当前WebBrower程序

    public class WebBrower { /// <summary> /// 修改注册表信息来兼容当前程序 /// /// </summary> public stat ...

  2. 快速傅里叶变换FFT& 数论变换NTT

    相关知识 时间域上的函数f(t)经过傅里叶变换(Fourier Transform)变成频率域上的F(w),也就是用一些不同频率正弦曲线的加 权叠加得到时间域上的信号. \[ F(\omega)=\m ...

  3. linux的/etc/profile、~/.profile、~/.bashrc、~./bash_profile这几个配置文件

    在添加环境变量的时候,我们会去修改配置文件 如果留意过,网上博文,有些在/etc/profile文件中配置的,有些是在~./bash_profile文件中配置的,等等 那么,/etc/profile. ...

  4. [模板]fhqTreap

    用途 平衡树(可实现区间翻转) 原理 和treap一样,中序遍历表示权值的顺序,并且每个点有一个随机的附加值,形成一个堆来保证复杂度 但是不旋转,所有操作通过split和merge实现 分为两种spl ...

  5. Phython中读写和存储.mat文件

    背景 在做deeplearning过程中,使用caffe的框架,一般使用matlab来处理图片(matlab处理图片相对简单,高效),用python来生成需要的lmdb文件以及做test产生结果.所以 ...

  6. 解决input框自动填充为黄色的问题

    题原因:input 框会自动填充一个颜色  如图所示  解决方法 :通过动画去延迟背景颜色的显示  代码如下 input:-webkit-autofill, textarea:-webkit-auto ...

  7. Springboot集成ECharts

    ECharts 是中国的,也是世界的! ECharts官网: ECharts,一个使用 JavaScript 实现的开源可视化库,可以流畅的运行在 PC 和移动设备上,兼容当前 绝大部分浏览器(IE8 ...

  8. markdown 转义字符

    \\ 反斜杠 \` 反引号 \* 星号 \_ 下划线 \{\} 大括号 \[\] 中括号 \(\) 小括号 \# 井号 \+ 加号 \- 减号 \. 英文句号 \! 感叹号

  9. DevExpress winform 友好皮肤

    DevExpress设置默认皮肤及各种皮肤样式   DevExpress设置默认皮肤及各种皮肤样式 设置默认皮肤代码: 在程序入口Program.cs里添加如下代码 引用using DevExpres ...

  10. mysql将表数据导出为txt或csv文件

    语法:select 字段 from 表名 into outfile 路径 示例txt:select * from stu_class into outfile './stu_class.text'; ...