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

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

*
!bin/*

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

有什么建议吗?

114454 次浏览

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

我想到了两种解决方案。

.gitignore:

*
!/bin/
!bin/*

.gitignore:

*
!/bin/

bin/.gitignore:

!*

我更喜欢第二个解决方案,因为第一个解决方案不会停止忽略bin目录中的文件,这些文件位于不称为bin的子目录中。这在你的情况下可能重要,也可能不重要。

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

/*
!/public_html
!/.gitignore

而不是忽略所有的文件,它将只忽略顶级文件,而不是那些你不想忽略的目录。

这个.gitignore适用于我:

*/
/*
!bin/

忽略根文件&根目录,然后取消忽略根bin目录:

/*
/*/
!/bin/

通过这种方式,您可以获得所有的bin目录,包括子目录及其文件。

这里如何忽略除某个目录中“MY_SUPER_DUPER_TEMPLATE_directory”目录外的所有内容

结构:/ / MY_SUPER_DUPER_TEMPLATE_directory bitrix /模板

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

你必须排除到目的地途中的一切,但你必须包括目的地:

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

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

尝试使用最新的GIT版本。

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

试试这个不起眼的git bug。

!bin**/**

希望能有所帮助。

支持文档Git错误示例

PS:在评论之前先试一下。

在官方git医生中,其中一个例子说:

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

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

关于前导斜杠的解释:在gitignore中什么时候使用前导斜杠

我最近不得不这么做:

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

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

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

  • 数据库(主文件夹)
    • conf(文件夹)
    • 司机(文件夹)
    • jar(文件夹)
    • sql(文件夹)

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

database/*
!database/sql/

第一行简单地说忽略数据库文件夹的所有子文件夹,第二行意味着因为你忽略了数据库文件夹的所有子文件夹排除(不忽略)sql子文件夹

派对来晚了,但没有一个答案对我有效。这一个是:

*
!bin
!bin/**
  • 第一行忽略了所有内容
  • 第二行包括后面的“;bin"目录本身
  • 最后一行包含了“bin”的全部内容;目录,无论它是如何嵌套的(注意双星号),

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

-- **/node_modules


++ **/node_modules/*

然后

++ !node_modules/@my-package/