我对忽略 git 中目录内容的正确方法感到困惑。
假设我有以下目录结构:
my_project
|--www
|--1.txt
|--2.txt
|--.gitignore
放置这个有什么区别:
www
和这个?
www/*
我问这个问题的原因是:在 git 中,如果目录为空,git 不会在存储库中包含这样的空目录。所以我尝试的解决方案是在目录下添加一个额外的 .gitkeep 文件,这样它就不会是空的。当我尝试该解决方案时,如果在 .gitignore 文件中,我会写如下:
www
!*.gitkeep
它不起作用(我的意图是忽略www下的所有内容但保留目录)。但如果我尝试以下操作:
www/*
!*.gitkeep
然后就可以了!所以我认为这两种方法之间肯定存在一些差异。
之间存在差异www
, www/
and www/*
.
基本上来自文档以及我自己的测试,www
查找与文件或目录的匹配项,www/
只匹配目录,而www/*
匹配里面的目录和文件www
.
我只会讨论之间的差异www/
and www/*
在这里,由于之间的差异www
and www/
是显而易见的。
For www/
, git 忽略该目录www
本身,这意味着 git 甚至不会查看内部。但对于www/*
, git 检查里面的所有文件/文件夹www
,并忽略所有具有模式的*
。这似乎会导致相同的结果,因为 git 不会跟踪空文件夹www
如果其所有子文件/文件夹都被忽略。事实上,对于 OP 的情况来说,结果不会有什么不同www/
or www/*
独立的。但如果与其他规则结合起来,它确实会产生差异。
例如,如果我们只想包括www/1.txt
但忽略里面的所有其他人www
?
下列.gitignore
行不通的。
www/
!www/1.txt
虽然以下.gitignore
有效,为什么?
www/*
!www/1.txt
对于前者,git 只是忽略目录www
,甚至不会查看内部以包括www/1.txt
再次。第一条规则排除父目录www
但不是www/1.txt
,结果www/1.txt
不可能是 ”再次包含在内".
但对于后者,git 首先忽略下面的所有文件/文件夹www
,然后再次包含其中之一,即www/1.txt
.
对于此示例,文档中的以下几行可能会有所帮助:
可选前缀“!”这否定了模式;任何匹配的文件
被先前模式排除的将再次被包含。它不是
如果该文件的父目录是,则可以重新包含该文件
排除。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)