Git:结账后清理空目录

时间:2015-01-14 11:16:46

标签: git git-checkout git-clean

我在" devel"分支和git status说"工作目录清理"。

我想查看过去的版本,然后签出代码:git checkout tags/v1.0.0。在此之后,在" v1.0.0"之间创建了一些目录。和我现在的#34;开发#34; HEAD保留为空但未删除(尽管创建标记时它们并不存在)。我相信这是因为git没有跟踪空目录。

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

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

2 个答案:

答案 0 :(得分:0)

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

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

在终端中执行以下操作:

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

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

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

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

git cco tag_name

答案 1 :(得分:0)

您的观察结果可能会通过更改.gitignore

来解释

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

如果您现在签出标记版本,它可能包含不同的.gitignore(不会忽略“foo”目录),您的工作目录现在看起来很脏。

  

当我签出标签时,我想要文件系统的确切状态   该标签已创建

鉴于您可以更改.gitignore(在您的仓库甚至全局)以及git永远不会以任何方式删除任何未跟踪文件的事实,如果没有额外调用{{1 }}