除了一个特定名称的目录外,Git如何排除具有特定名称的目录?

4
我看到了几个类似的问题,并阅读了 gitignore手册,但仍然无法解决这个问题。
我想排除所有名为 lib 的文件夹(我的规则是 "lib/"),但不包括一个单独的文件夹(将来可能会有更多)位于 <root>/3rdparty/projectX/lib/ 下,这是一个第三方文件夹,我不能更改它的名称。
我尝试过这个:
!lib/
lib/*
!projectX/lib/

但这也包括其他不在根目录下的带有lib文件夹的文件夹

是否可以将此文件夹添加为异常?如何操作?

1个回答

7
你有几个选择。
完整路径:
lib/
!3rdparty/projectX/lib/

通配符匹配:

lib/
!*/projectX/lib/

通配符匹配任意级别的子目录:

lib/
!**/projectX/lib/

你的 gitignore 文件没有起作用是因为它只在根目录下特别忽略了 projectX 目录。


对我来说它是有效的。如果您没有看到任何差异,请记得在编辑完成后将gitignore文件添加到git中。 - Tom
好的,让我们等待问题作者给出反馈... ;) - Idemax
首先,感谢您的回答。其次,只有第三个选项对我有效。 我想要包含(取消忽略)的库位于 <root>/<3个文件夹路径>/projectX/lib 下。 - ZivS
你能否在回答中解释一下为什么这个方法有效?或者是如何有效的? - ZivS
第一种选项需要输入完整路径,因此您需要包括这三个额外的文件夹。对于第二个选项,* 只匹配一个文件夹,因此 */projectX 将匹配 AnyFolderName/projectX,但不会匹配 multiple/nested/folders/projectX。要匹配任何级别的嵌套文件夹,请使用 ** - Tom
它应该是相对于您的.gitignore的完整路径。 - Tom

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接