“git clean -f”不会留下空目录

时间:2013-09-01 16:35:07

标签: git

如果我的存储库中有一个目录 app ,其中有一个未跟踪的文件,我执行git clean -f,我收到消息:不删除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 个答案:

答案 0 :(得分:6)

您需要传递-d的{​​{1}}选项才能删除未跟踪的目录。

答案 1 :(得分:2)

git不跟踪目录 - 你不能将空目录提交给git。

(尝试创建一个空目录,并将其添加到git中 - 你不会看到git状态的任何变化)

即使您将一些文件添加到未跟踪的目录中,git也不会显示git status中的所有文件 - 它只显示目录

检查this question以获取有关为什么git不版本目录的更多答案。

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