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

Mic*_*erz 203 git gitignore

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

*
!bin/*
Run Code Online (Sandbox Code Playgroud)

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

有什么建议?

Tyl*_*ing 262

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

/*
/*/
!/bin/
Run Code Online (Sandbox Code Playgroud)

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

  • 出于某种原因,这对我来说并不一致.我有两行`/ stuff /`和`!/ stuff/specific /`,但它仍然忽略/ stuff/specific / (24认同)
  • /*/ 是必要的吗? (4认同)
  • @LB 和其他人,试试 `/stuff/*` 和 `!/stuff/specific/`。区别在于`/stuff/` 告诉它忽略stuff 目录本身,`/stuff/*` 说忽略stuff 目录中的所有目录,然后不要忽略这个特定目录。这对我来说是不同的。 (3认同)
  • 这对我不起作用。我必须在根目录.gitignore中添加`// bin /`,但随后我还必须在目录中添加`/ * / bin / .gitignore`!*...。不行 只有结合了两个更改,它才能起作用。 (2认同)

And*_*nko 103

这里如何忽略一些目录中的一个目录" 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
Run Code Online (Sandbox Code Playgroud)

  • 这对于忽略我修改过的 Laravel 供应商包产生了奇迹!谢谢你,你帮我解决了很多头痛问题 (3认同)
  • 这为我解决了子子目录。谢谢 (2认同)

nik*_*ikc 58

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

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

/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore
Run Code Online (Sandbox Code Playgroud)

  • +1包含目录的原则,然后,排除它的内容,然后,包括所需的子目录等.我最终在我的项目上使用这个答案. (10认同)

CB *_*ley 39

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

有两种解决方案可供您考虑.

.gitignore :

*
!/bin/
!bin/*
Run Code Online (Sandbox Code Playgroud)

要么

.gitignore :

*
!/bin/
Run Code Online (Sandbox Code Playgroud)

bin/.gitignore :

!*
Run Code Online (Sandbox Code Playgroud)

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

  • 不适合我.我必须有一个这样的.gitignore才能使它工作:`#忽略一切*#但不是这些文件......!/ wp-content /!/ wp-content/plugins /!/ wp-content/plugins/my_plugin /!/ wp-content/plugins/my_plugin/*`评论中没有块代码? (2认同)

sol*_*333 18

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

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

$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
Run Code Online (Sandbox Code Playgroud)

有关前导斜杠的说明:何时在gitignore中使用前导斜杠.


Kir*_*rby 12

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

*
!*/
!/path/to/your/dir/**
Run Code Online (Sandbox Code Playgroud)


Jak*_*ake 11

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

/*
!/public_html
!/.gitignore
Run Code Online (Sandbox Code Playgroud)

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


gre*_*man 9

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

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


小智 8

.gitignore对我有用:

*/
/*
!bin/
Run Code Online (Sandbox Code Playgroud)


dav*_*vid 5

尝试这个不起眼的git bug.

!bin**/**
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 :)

支持docs git bug示例

PS:在评论之前先试一试.