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
.
我在我的 "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
.