如何让Git忽略除子目录之外的所有内容?
我想忽略存储库中的所有文件,除了出现在如何让Git忽略除子目录之外的所有内容?,git,gitignore,Git,Gitignore,我想忽略存储库中的所有文件,除了出现在bin子目录中的文件。我尝试将以下内容添加到我的.gitignore: * !bin/* 但是,这并没有达到预期效果:我在bin/中创建了一个新文件,但是执行git status仍然显示无需提交(工作目录清理) 有什么建议吗?您唯一的问题是bin目录本身与bin/*模式不匹配,因此git甚至不在bin目录中查找 有两种解决方案浮现在脑海中 .gitignore: * !/bin/ !bin/* * !/bin/ !* 或 .gitignore: *
bin
子目录中的文件。我尝试将以下内容添加到我的.gitignore
:
*
!bin/*
但是,这并没有达到预期效果:我在bin/
中创建了一个新文件,但是执行git status
仍然显示无需提交(工作目录清理)
有什么建议吗?您唯一的问题是
bin
目录本身与bin/*
模式不匹配,因此git甚至不在bin
目录中查找
有两种解决方案浮现在脑海中
.gitignore
:
*
!/bin/
!bin/*
*
!/bin/
!*
或
.gitignore
:
*
!/bin/
!bin/*
*
!/bin/
!*
bin/.gitignore
:
*
!/bin/
!bin/*
*
!/bin/
!*
我更喜欢第二种解决方案,因为第一种解决方案不会停止忽略
bin
目录中的文件,这些文件位于不称为bin
的子目录中。在您的情况下,这可能很重要,也可能不重要。我认为更好的方法是通过以斜杠开始模式,将每个模式锚定到顶部git目录:
/*
!/public_html
!/.gitignore
与其忽略所有文件,它只会忽略顶级文件,而不是您不想忽略的目录中的文件。此
.gitignore
适用于我:
*/
/*
!bin/
这将忽略根文件和根目录,然后取消忽略根bin目录:
/*
/*/
!/bin/
通过这种方式,您可以获得所有bin目录,包括子目录及其文件。这里介绍了如何忽略除某个目录中的一个目录“MY_SUPER\u DUPER\u TEMPLATE\u目录”之外的所有内容 结构:/bitrix/templates/我的超级复制器模板目录
/*
!/bitrix
/bitrix/*
!/bitrix/templates
/bitrix/templates/*
!/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory
*.DS_Store
*.gitignore
您必须排除前往目的地途中的所有内容,但必须包括目的地: 注意:这是一个排除文件(即gitignore),因此逻辑颠倒。忽略所有,tsp目录除外,忽略tsp目录中的所有,src目录除外
在最新的GIT版本中尝试以下内容
*
!*/
!/path/to/your/dir/**
试试这个晦涩难懂的git bug
!bin**/**
希望有帮助:)
支持文件
PS:在评论之前先尝试一下。从官方那里,一个例子说:
排除除特定目录foo/bar之外的所有内容的示例(注意/*-不带斜杠,通配符也会排除foo/bar中的所有内容):
关于前导斜杠的解释:。我最近不得不这样做:
*
!sub-dir/
!sub-dir/*
我不知道为什么我需要两行来排除一个文件夹,但这对我和macos来说都是有效的。这是我的解决方案。在我的场景中,我有一个包含子文件夹的文件夹,如下所示:
database/*
!database/sql/
- 数据库(主文件夹)
- conf(子文件夹)
- 驱动程序(子文件夹)
- jars(子文件夹)
- sql(子文件夹)
.gitignore
文件如下所示:
database/*
!database/sql/
其中第一行简单地说忽略数据库文件夹的所有子文件夹,第二行的意思是,由于您忽略了数据库文件夹的所有子文件夹,因此排除(不要忽略)sql子文件夹对我不起作用。我必须有一个像这样的.gitignore来让它工作:
#忽略一切*#但不要忽略这些文件/wp内容//wp内容/插件//wp content/plugins/my_plugin//wp content/plugins/my_plugin/*
注释中是否没有块代码?有更好的单文件解决方案+1,原则是包括一个目录,然后排除它的内容,然后包括所需的子目录,等等。我最终在我的项目中使用了这个答案。出于某种原因,这对我来说并不一致。我有两行/stuff/
和/stuff/specific/
,但它仍然忽略/stuff/specific/@LB——我有一个类似的问题,git-check-ignore-v
告诉我这是因为~/.gitignore
是/*/必需的吗?这对我不起作用。我不得不添加/bin/
到我的根.gitignore
文件中,但是另外我必须添加一个/bin/.gitignore
文件和*代码>。。。只做其中一个改变是行不通的。它只有在合并了这两个更改后才起作用。@LB和其他更改后,请尝试/stuff/*
和/填充/特定/
。区别在于/stuff/
告诉它忽略stuff目录本身,/stuff/*
说忽略stuff目录中的所有目录,然后不要忽略这个特定目录。这对我来说很重要,事实上应该如此/path/to/your/dir/**为最后一个line@faham,是的,刚刚添加了它。还可以看到,这对于取消我修改过的laravel供应商软件包非常有用!谢谢你,你帮我省去了很多头痛。这应该被选为最佳答案。万分感谢你,这对我很有用!请注意,这里的行的顺序很重要,您不能有/例如,foo/bar在/foo/*之前。