252

我想忽略我的存储库中的所有文件,除了那些出现在bin子目录中的文件。我尝试将以下内容添加到我的.gitignore

*
!bin/*

但是,这并没有达到预期的效果:我在 中创建了一个新文件bin/,但git status仍然显示nothing to commit (working directory clean).

有什么建议么?

4

13 回答 13

314

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

/*
/*/
!/bin/

这样你就可以得到所有的 bin 目录,包括子目录和它们的文件。

于 2011-12-21T19:04:46.030 回答
130

在这里如何忽略某个目录中除一个目录“ 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
于 2012-06-13T15:43:12.387 回答
74

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

注意:这是一个排除文件(即.gitignore),所以逻辑是相反的。忽略所有,除了tsp目录,忽略tsp目录中的所有,除了src目录...

/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore
于 2013-01-20T07:27:12.687 回答
42

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

有两种解决方案浮现在脑海中。

.gitignore

*
!/bin/
!bin/*

或者

.gitignore

*
!/bin/

bin/.gitignore

!*

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

于 2009-08-08T11:21:38.840 回答
24

从官方git doc,其中一个例子说:

排除除特定目录 foo/bar 之外的所有内容的示例(注意 /* - 没有斜线,通配符也将排除 foo/bar 中的所有内容):

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

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

于 2016-07-18T09:53:20.463 回答
14

尝试关注最新的 GIT 版本。

*
!*/
!/path/to/your/dir/**
于 2015-09-23T12:11:22.063 回答
12

我认为更好的方法是通过以斜线开头的模式将每个模式锚定到顶部 git 目录:

/*
!/public_html
!/.gitignore

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

于 2010-11-05T21:18:13.313 回答
9

.gitignore对我有用:

*/
/*
!bin/
于 2011-04-07T13:50:29.363 回答
6

试试这个不起眼的 git 错误。

!bin**/**

希望能帮助到你 :)

支持文档git bug 示例

PS:先试试再评论。

于 2016-02-09T03:16:09.170 回答
4

我最近不得不这样做:

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

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

于 2019-09-25T23:35:09.360 回答
2

聚会迟到了,但没有一个答案对我“开箱即用”。这个可以:

* 
!bin
!bin/**
  • 第一行忽略一切
  • 第二行包括后面的“bin”目录本身
  • 最后一行包括“bin”目录的全部内容,无论它是多么嵌套(注意双星号),
于 2021-06-24T07:38:36.417 回答
0

这是我的解决方案。在我的场景中,我有一个包含子文件夹的文件夹,如下所示:

  • 数据库(主文件夹)
    • conf(子文件夹)
    • 驱动程序(子文件夹)
    • 罐子(子文件夹)
    • sql(子文件夹)

数据库文件夹中,我只想推送sql文件夹,所以我的.gitignore文件如下:

database/*
!database/sql/

第一行只是说忽略数据库文件夹的所有子文件夹,第二行的意思是因为您忽略了数据库文件夹的所有子文件夹排除(不要忽略)sql子文件夹

于 2020-08-26T12:25:03.980 回答
0

对我来说,事实证明我不应该忽略父文件夹,而是使用其中的文件和文件夹/*

-- **/node_modules

++ **/node_modules/*

然后

++ !node_modules/@my-package/
于 2021-11-15T19:08:37.127 回答