无法取消忽略 GIT 子目录
Not able to un-ignore GIT sub-directory
很简单,我想取消忽略已忽略目录中的子目录。
我的.gitignore
:
app/migrations/
!app/migrations/config/Migrations/*
它不起作用,如果我删除第一行 app/migrations
未被忽略,但第二行没有按预期工作。我也试过:
!app/migrations/config/*
但是似乎无法取消忽略?
更新
这似乎是 GIT 的一个缺点,它不能正确支持取消忽略子目录。令人惊讶的是,这样一个标准工具无法支持如此简单的配置,无论是疏忽还是错误。
根据 Git 文档:
It is not possible to re-include a file if a parent directory of that file is excluded.
如果您取消忽略所有文件夹,直到您想要的文件夹,才有可能实现您想要的效果:
app/migrations/*
!app/migrations/config/*
app/migrations/config/*
!app/migrations/config/Migrations/*
可能与
重复
正如更新中提到的,我试图实现的目标没有得到适当的支持,我几乎可以实现我想要的目标:
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 行只是为了取消忽略子目录。
希望这能帮助那些被这个限制绊倒的人。
这会起作用,并且从根开始 .gitignore
是最短的序列可以有效地起作用:
app/migrations/*
!app/migrations/config
app/migrations/config/*
!app/migrations/config/Migrations
(第二行写成!app/migrations/config/
可能更清楚更明确但是只要config
是一个目录,效果就是相同。请参阅下面我的附加说明。)
In short you have to ignore then un-ignore each sub-directory.
这是正确的,因为当 目录 实际上被忽略时(根据最后一个匹配的 .gitignore
规则),这将 Git 权限授予 完全忽略扫描目录。因此,它永远不会看到该目录中的 any 文件或子目录。然而,它非常有效:Git 从来不需要 打开 目录!这就是为什么这条规则如此运作的原因。
However this does not work 100% since app/migrations/config/* is un-ignored when it should only be app/migrations/config/Migrations.
那是因为你说要那样做。说按照你的意思去做,你就可以了。 :-)
What's more this is not only over-complicated but also makes for an almost unreadable and bloated git-ignore file - 6 lines just to un-ignore a sub-sub-directory.
嗯,四行。也就是说,我同意这太复杂了。 Git 应该识别模式:
dir/*
!dir/sub/something
并自动插入适当的 !dir/sub/
。同样适用于:
dir/*
!dir/sub1/sub2/something
这里,Git可以根据需要自动插入!dir/sub1/
和!dir/sub1/sub2/
规则,并根据需要相应的“忽略所有文件”规则。这些未忽略的插入应以 /
结尾,以防 dir/sub
、dir/sub1
、and/or dir/sub1/sub2
是文件而不是目录。
很简单,我想取消忽略已忽略目录中的子目录。
我的.gitignore
:
app/migrations/
!app/migrations/config/Migrations/*
它不起作用,如果我删除第一行 app/migrations
未被忽略,但第二行没有按预期工作。我也试过:
!app/migrations/config/*
但是似乎无法取消忽略?
更新
这似乎是 GIT 的一个缺点,它不能正确支持取消忽略子目录。令人惊讶的是,这样一个标准工具无法支持如此简单的配置,无论是疏忽还是错误。
根据 Git 文档:
It is not possible to re-include a file if a parent directory of that file is excluded.
如果您取消忽略所有文件夹,直到您想要的文件夹,才有可能实现您想要的效果:
app/migrations/*
!app/migrations/config/*
app/migrations/config/*
!app/migrations/config/Migrations/*
可能与
重复正如更新中提到的,我试图实现的目标没有得到适当的支持,我几乎可以实现我想要的目标:
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 行只是为了取消忽略子目录。
希望这能帮助那些被这个限制绊倒的人。
这会起作用,并且从根开始 .gitignore
是最短的序列可以有效地起作用:
app/migrations/*
!app/migrations/config
app/migrations/config/*
!app/migrations/config/Migrations
(第二行写成!app/migrations/config/
可能更清楚更明确但是只要config
是一个目录,效果就是相同。请参阅下面我的附加说明。)
In short you have to ignore then un-ignore each sub-directory.
这是正确的,因为当 目录 实际上被忽略时(根据最后一个匹配的 .gitignore
规则),这将 Git 权限授予 完全忽略扫描目录。因此,它永远不会看到该目录中的 any 文件或子目录。然而,它非常有效:Git 从来不需要 打开 目录!这就是为什么这条规则如此运作的原因。
However this does not work 100% since app/migrations/config/* is un-ignored when it should only be app/migrations/config/Migrations.
那是因为你说要那样做。说按照你的意思去做,你就可以了。 :-)
What's more this is not only over-complicated but also makes for an almost unreadable and bloated git-ignore file - 6 lines just to un-ignore a sub-sub-directory.
嗯,四行。也就是说,我同意这太复杂了。 Git 应该识别模式:
dir/*
!dir/sub/something
并自动插入适当的 !dir/sub/
。同样适用于:
dir/*
!dir/sub1/sub2/something
这里,Git可以根据需要自动插入!dir/sub1/
和!dir/sub1/sub2/
规则,并根据需要相应的“忽略所有文件”规则。这些未忽略的插入应以 /
结尾,以防 dir/sub
、dir/sub1
、and/or dir/sub1/sub2
是文件而不是目录。