我在" devel"分支和git status
说"工作目录清理"。
我想查看过去的版本,然后签出代码:git checkout tags/v1.0.0
。在此之后,在" v1.0.0"之间创建了一些目录。和我现在的#34;开发#34; HEAD保留为空但未删除(尽管创建标记时它们并不存在)。我相信这是因为git没有跟踪空目录。
为了与创建标记时具有完全相同的状态,我还需要调用git clean -fd
来删除这些剩余的空目录。
当我签出一个标签时,我想要在创建该标签时文件系统的确切状态 - 我应该在结帐后经常调用git clean -fd
吗?
答案 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 }}