"git clean -f"不会留下空目录。

5
如果我在我的存储库中有一个名为app的目录,其中有一个单独的未跟踪文件,并且我执行git clean -f,我会收到消息:Not removing app/,未跟踪的文件仍然存在。
但是,如果我在同一目录中有另一个已跟踪的文件,并执行完全相同的命令,则未跟踪的文件将被成功删除。
所以我的问题是:如果从未跟踪的文件中清除后该目录将为空,为什么Git要尝试删除该目录?
以下是可重现行为的脚本。提前感谢您。
#!/bin/bash

# Create new empty repo
mkdir myrepo && cd myrepo
git init

# Create app directory with main.c
mkdir app
touch app/main.c

# Try to delete main.c with git clean -> Not working
git clean -f

# Add helper.c to app directory and add to index
touch app/helper.c
git add app/helper.c

# Try to delete main.c with git clean -> Now it's working
git clean -f
2个回答

6

您需要传递-d选项给git clean以删除未跟踪的目录。


谢谢回复。但是我不清楚为什么Git想要在命令后整个删除目录,即使它是空的。 - DAXaholic
1
好的,git不想删除该目录(否则它会像您第二个案例中那样这样做,而不是抱怨并继续)。由于git-clean默认忽略未跟踪的目录(或者说,没有跟踪文件的目录),因此它永远不会进入它们。 - Hasturkun
好的,现在我明白了。 "...它从未进入它们"是关键 ;) 谢谢! - DAXaholic

2

Git无法跟踪目录——你不能将空目录提交到Git。

(尝试创建一个空目录,并将其添加到Git中——你不会在git状态中看到任何更改)

即使你向未跟踪的目录添加一些文件,git也不会在git status中显示所有文件——它只会显示目录。

查看这个问题以获取有关Git不版本化目录的更多答案。

因此,正如@Hasturkun在他的答案中指出的那样,你需要向git clean传递-d以删除未跟踪的目录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接