如何解决无法取消忽略 GIT 子目录
很简单,我希望取消忽略被忽略目录中的子目录。
我的.gitignore
:
app/migrations/
!app/migrations/config/Migrations/*
它不起作用,如果我删除第一行 app/migrations
被忽略,但第二行没有按预期工作。我也试过:
!app/migrations/config/*
但似乎无法取消忽略?
更新
这似乎是 GIT 的一个缺点,它没有正确支持不可忽略的子目录。令人惊讶的是,这样的标准工具无法支持如此简单的配置,无论是疏忽还是错误。
解决方法
这会起作用,并且从根 .gitignore
开始是可以高效运行的最短序列:
app/migrations/*
!app/migrations/config
app/migrations/config/*
!app/migrations/config/Migrations
(把第二行写成 !app/migrations/config/
可能更清晰明确,但只要 config
是一个目录,效果是一样的。看我的补充说明如下。)
简而言之,您必须忽略然后取消忽略每个子目录。
这是正确的,因为当目录实际上被忽略时(通过最后一个匹配的 .gitignore
规则),这使 Git 可以完全忽略对目录的扫描.因此,它永远不会看到该目录中的任何 文件或子目录。然而,它非常有效:Git 从来不需要打开目录!这就是为什么这条规则如此运作的原因。
然而,这并不能 100% 工作,因为 app/migrations/config/* 在它应该只是 app/migrations/config/Migrations 时未被忽略。
那是因为你说要这样做。说做你的意思,你就可以了。 :-)
更重要的是,这不仅过于复杂,而且导致了一个几乎不可读且臃肿的 git-ignore 文件 - 6 行只是为了取消忽略一个子目录。
好吧,四行。也就是说,我同意这过于复杂。 Git 应该能够识别这种模式:
dir/*
!dir/sub/something
并自动插入适当的 !dir/sub/
。同样适用于:
dir/*
!dir/sub1/sub2/something
在这里,Git 可以根据需要自动插入 !dir/sub1/
和 !dir/sub1/sub2/
规则,并根据需要使用相应的“忽略其中的所有文件”规则。如果 /
、dir/sub
和/或 dir/sub1
是文件而不是目录,这些取消忽略插入应以 dir/sub1/sub2
结尾。
正如更新中提到的,我想要实现的目标没有得到适当的支持,我几乎可以实现我想要的:
app/migrations/
!app/migrations
app/migrations/config/
!app/migrations/config
app/migrations/config/Migrations/
!app/migrations/config/Migrations
简而言之,您必须忽略然后取消忽略每个子目录。然而,这并不能 100% 工作,因为 app/migrations/config/* 在它应该是 app/migrations/config/Migrations 时未被忽略。更重要的是,这不仅过于复杂,而且导致了一个几乎不可读且臃肿的 git-ignore 文件 - 6 行只是为了取消忽略一个子目录。
希望这能帮助那些被这个限制绊倒的人。
,根据 Git 文档:
如果文件的父目录被排除,则无法重新包含该文件。
如果您取消忽略所有文件夹直到您想要的文件夹,则可以实现您想要的:
app/migrations/*
!app/migrations/config/*
app/migrations/config/*
!app/migrations/config/Migrations/*
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。