5

如果我的存储库中有一个目录应用程序,其中包含一个未跟踪的文件并且我执行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
4

2 回答 2

6

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

于 2013-09-01T16:40:30.190 回答
2

git 不跟踪目录——你不能向 git 提交一个空目录。

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

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

检查这个问题以获得更多关于为什么 git 不版本目录的答案。

因此,正如@Hasturkun 在他的回答中指出的那样,您需要通过 -dtogit clean删除未跟踪的目录

于 2013-09-01T16:50:41.540 回答