Git:结帐后清理空目录

Git: clean empty directories after checkout

我在我的 "devel" 分支上 git status 说 "working directory clean"。

我想查看过去的版本,因此查看标签:git checkout tags/v1.0.0。在此之后,在 "v1.0.0" 和我当前的 "devel" HEAD 之间创建的一些目录留空但未删除(尽管在创建标签时它们不存在)。我相信这是因为 git 不跟踪空目录。

为了拥有与创建标签时完全相同的状态,我还需要调用 git clean -fd 来删除这些剩余的空目录。

当我签出一个标签时,我想要创建该标签时文件系统的确切状态 - 我应该总是在签出后调用 git clean -fd 吗?

是的,您将需要手动清理目录,因为在 git 中从不跟踪目录,只有文件。

要一步完成此操作,您可以将 shell 函数定义为 git 别名,以便一步完成。

在您的终端中执行以下操作:

git config alias.cco "! f(){ git checkout \"$1\" && git clean -fd; }; f"

或编辑您的 .git/config 文件并在其中添加此条目:

[alias]
    cco = "! f(){ git checkout \"\" && git clean -fd; }; f"

现在,您可以 运行 一次使用这两个命令:

git cco tag_name

您的观察可能可以通过 .gitignore:

的变化来解释

假设您目前在 "devel" 分支中,但有一个未跟踪的 "foo" 目录。如果 "foo" 列在您的 .gitignore 中,git status 将(正确地)报告一个干净的工作目录。

如果您现在检查标记的版本,它可能包含不同的 .gitignore(不忽略 "foo" 目录)并且您的工作目录现在看起来很脏。

When I checkout a tag, I want the exact state of the filesystem when that tag was created

考虑到您可以更改 .gitignore(在您的存储库中甚至全局)并且 git 永远不会静默删除任何未跟踪的文件,如果没有额外调用 git clean -fd.