我想忽略存储库中的所有文件,除了那些出现在bin子目录中的文件。我试着在我的.gitignore中添加以下内容:
*
!bin/*
然而,这并没有达到预期的效果:我在bin/中创建了一个新文件,但是执行git status仍然没有显示任何要提交的内容(工作目录清洁)。
有什么建议吗?
我想忽略存储库中的所有文件,除了那些出现在bin子目录中的文件。我试着在我的.gitignore中添加以下内容:
*
!bin/*
然而,这并没有达到预期的效果:我在bin/中创建了一个新文件,但是执行git status仍然没有显示任何要提交的内容(工作目录清洁)。
有什么建议吗?
当前回答
从官方git文档中,有一个例子是这样说的:
示例排除除特定目录foo/bar以外的所有内容(注意/* -没有斜杠,通配符也会排除foo/bar内的所有内容):
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
关于前导斜杠的解释:在gitignore中什么时候使用前导斜杠。
其他回答
迟到了,但没有一个答案对我来说是“开箱即用”的。这一个是:
*
!bin
!bin/**
第一行忽略了所有内容 第二行包含回“bin”目录本身 最后一行包含了“bin”目录的全部内容,不管它是如何嵌套的(注意双星号),
忽略根文件和根目录,然后取消忽略根bin目录:
/*
/*/
!/bin/
通过这种方式,您可以获得所有的bin目录,包括子目录及其文件。
唯一的问题是bin目录本身与bin/*模式不匹配,所以git甚至没有在bin目录中查找。
我想到了两种解决方案。
.gitignore:
*
!/bin/
!bin/*
or
.gitignore:
*
!/bin/
bin /。gitignore:
!*
我更喜欢第二种解决方案,因为第一种解决方案不会停止忽略bin目录中不称为bin的子目录中的文件。这在你的情况下可能重要,也可能不重要。
从官方git文档中,有一个例子是这样说的:
示例排除除特定目录foo/bar以外的所有内容(注意/* -没有斜杠,通配符也会排除foo/bar内的所有内容):
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
关于前导斜杠的解释:在gitignore中什么时候使用前导斜杠。
这是我的解决方案。在我的场景中,我有一个文件夹,子文件夹如下:
数据库(主文件夹) conf(文件夹) 司机(文件夹) jar(文件夹) sql(文件夹)
从数据库文件夹中,我想只推送sql文件夹,所以我的.gitignore文件如下:
database/*
!database/sql/
第一行简单地说忽略数据库文件夹的所有子文件夹,第二行意味着因为你忽略了数据库文件夹的所有子文件夹排除(不忽略)sql子文件夹