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

时间:2009-08-08 11:04:40

标签: git gitignore

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

*
!bin/*

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

有什么建议吗?

12 个答案:

答案 0 :(得分:250)

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

/*
/*/
!/bin/

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

答案 1 :(得分:91)

这里如何忽略一些目录中的所有内容“ 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

答案 2 :(得分:52)

您必须在前往目的地的路上排除所有内容,但必须包含目的地:

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

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

答案 3 :(得分:37)

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

有两种解决方案可供考虑。

.gitignore

*
!/bin/
!bin/*

.gitignore

*
!/bin/

bin/.gitignore

!*

我更喜欢第二种解决方案,因为第一种解决方案不会停止忽略bin目录中未被称为bin的子目录中的文件。在您的情况下这可能或不重要。

答案 4 :(得分:15)

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

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

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

有关前导斜杠的说明:When to use leading slash in gitignore

答案 5 :(得分:11)

我认为更好的方法是通过使用斜杠启动模式将每个模式锚定到顶级git目录:

/*
!/public_html
!/.gitignore

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

答案 6 :(得分:11)

请尝试使用最新的GIT版本。

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

答案 7 :(得分:7)

.gitignore对我有用:

*/
/*
!bin/

答案 8 :(得分:5)

尝试这个不起眼的git bug。

!bin**/**

希望有所帮助:)

支持文档git bug sample

PS:在评论之前先试试。

答案 9 :(得分:0)

我最近必须这样做:

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

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

答案 10 :(得分:0)

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

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

答案 11 :(得分:-1)

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

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

database 文件夹中,我只想推送 sql 文件夹,这样我的.gitignore文件如下:

database/*
!database/sql/

第一行仅表示忽略 database 文件夹的所有子文件夹,第二行表示由于您忽略了 database 的所有子文件夹文件夹排除(不要忽略) sql 子文件夹