如何告诉Git忽略除子目录之外的所有内容?


Answers:


273

这将忽略根文件和根目录,然后取消忽略根bin目录:

/*
/*/
!/bin/

这样,您将获得所有bin目录,包括子目录及其文件。


25
出于某种原因,这对我而言并不一致。我有两行/stuff/!/stuff/specific/,但它仍然忽略/材料/特定/
LB--

1
@ LB--我有一个类似的问题,并git check-ignore -v告诉我这是因为~/.gitignore
Gurney alex 2014年

@gurneyalex我发现,如果删除本地存储库并重新克隆它,它会自行修复,这一定是一个错误。
LB-- 2014年

2
/ * /是否必要?
亚历克斯·贝克

3
这对我不起作用。我必须添加!/bin/到我的根.gitignore文件中,但是除此之外,我还必须添加/bin/.gitignore带有!*... 的文件。仅进行这些更改之一是行不通的。只有结合了两个更改,它才能起作用。
费利佩·勃拉姆

113

在这里,如何忽略所有内容,而不是某个目录中的目录“ MY_SUPER_DUPER_TEMPLATE_directory

结构:/ bitrix / templates / MY_SUPER_DUPER_TEMPLATE_directory

/*
!/bitrix
/bitrix/*
!/bitrix/templates
/bitrix/templates/*
!/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory
*.DS_Store
*.gitignore

1
对于忽略我已修改的laravel供应商软件包,这产生了奇迹!谢谢,您为我省去了很多头痛
MariaVilaró17年

应该选择它作为最佳答案。
巴赫曼。

63

您必须排除前往目的地的所有内容,但必须包括目的地:

注意:这是一个排除文件(即.gitignore),因此逻辑取反。忽略除tsp目录之外的所有内容,忽略除src目录之外的tsp目录中的所有内容...

/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore

11
+1的原则是包括目录,然后包括其目录,然后包括所需的子目录,等等。我最终在项目中使用了此答案。
约翰·耶稣

40

您唯一的问题是bin目录本身与bin/*模式不匹配,因此git甚至不在bin目录中查找。

我想到了两种解决方案。

.gitignore

*
!/bin/
!bin/*

要么

.gitignore

*
!/bin/

bin/.gitignore

!*

我更喜欢第二种解决方案,因为第一种解决方案不会停止忽略bin目录中未调用子目录中的文件bin。这可能与您的情况无关紧要。


2
没为我工作。我必须像这样使用.gitignore才能使其工作: # Ignore everything * # But not these files... !/wp-content/ !/wp-content/plugins/ !/wp-content/plugins/my_plugin/ !/wp-content/plugins/my_plugin/* 注释中没有块代码?
xlttj 2012年

1
泰勒(Tyler)的答案具有更好的单文件解决方案
Yarin 2012年

19

从官方git doc来看,其中一个示例说:

排除特定目录foo / bar以外的所有内容的示例(请注意/ *-不带斜杠,通配符还将排除foo / bar内的所有内容):

$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar

有关前导斜杠的解释:何时在gitignore中使用前导斜杠


谢谢你一百万,这对我有用!注意其他人这里的行顺序很重要,例如,在/ foo / *之前不能有!/ foo / bar。
Iamsodarncool

13

尝试遵循最新的GIT版本。

*
!*/
!/path/to/your/dir/**

最后一行实际上应该是!/ path / to / your / dir / **
faham

@faham,是的,刚刚添加了它。
柯比

11

我认为更好的方法是通过以斜杠开始模式来将每个模式锚定到顶级git目录:

/*
!/public_html
!/.gitignore

除了忽略所有文件,它只会忽略顶级文件,而不忽略您不想忽略的目录中的文件。



5

试试这个晦涩的git bug。

!bin**/**

希望能帮助到你 :)

支持文档git bug示例

PS:先发表评论,然后再尝试。


0

我最近不得不这样做:

*
!sub-dir/
!sub-dir/*

我不确定为什么需要两行来排除一个文件夹,但这对我和macos都有效。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.