1

我在我的“开发”分支上并git status说“工作目录干净”。

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

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

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

4

2 回答 2

1

是的,您需要手动清理目录,因为在 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
于 2015-01-14T12:24:20.990 回答
0

您的观察结果可能会通过您的变化来解释.gitignore

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

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

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

鉴于您可以更改您的.gitignore(在您的 repo 甚至全局)以及 git 永远不会静默删除任何未跟踪文件的事实,如果不额外调用git clean -fd.

于 2015-01-14T12:44:36.183 回答