如何干净地删除包含.gitignore并且可能包含临时忽略文件的目录



考虑以下布局:

tests/
Vendor/
Product/
Module/
db/
.gitignore
file-created-by-test-runs-and-ignored-by-gitignore-above.json
SomeTest.php
OtherTest.php

在一个冗长的主题分支中,我们希望重新组织测试,将上面的大部分内容移到testsunit下,并将临时文件的位置移到其他地方,以使它们不在版本化的源树中。

我们大胆地将树带到所需的状态:

tests/
unit/
Vendor/
Product/
Module/
SomeTest.php
OtherTest.php

在将测试基类重构为使用/tmp或其他什么之后,我们真诚地进行了承诺。

然后我们再次签出主分支,做一些工作并运行主分支的测试套件版本。

然后,我们检查主题分支,突然间,在tests/Vendor/Product/Module/db下,主分支测试运行留下的临时文件被列为未跟踪文件。它们现在没有被忽略,因为.gitignore文件(版本为(是通过签出主题分支删除的,但那些.gitignore文件忽略的文件显然不是

有没有一种建议的做法可以避免这种烦恼,并有效地表达意图,"嘿,git,这个提交删除了这个目录;它使它消失了.我们不希望它或其中的任何东西在这个提交后存在,直到我们再次改变主意"?我把树带到想要的状态,然后我承诺。我希望这种情况会持续下去。它能实现吗?

"嘿,git,这个提交删除了这个目录;它让它消失了。

Git不跟踪目录,只跟踪文件。它不知道你删除了一个目录,只知道你删除其中的文件

您可以更改生成文件以清除旧位置中的违规文件。或者你可以把.gitignore留在原来的位置。但对于一个不应该活很久的分支机构来说,这是一堆工作。这些是针对临时情况的永久代码更改。

如果您只在这个特定的分支上,您可以编写一个签出后挂钩,删除db目录。这样做的优点是,一旦完成分支,就很容易删除。但是,对于一个无论如何都应该很快合并的主题分支来说,这可能不值得付出努力。

进行这样的彻底更改时,最好的做法是尽可能少地执行操作并合并分支。这样就避免了主题分支中的文件与主分支中的不同的许多问题。你只看到一个。当提交被添加到采用旧布局的主分支时,将会出现更多的问题。

最新更新