90

如何在本地删除一个空文件夹,并让其他通过 pull-push 共享远程的协作者也发生这种情况?我知道 git 在这个意义上没有“跟踪”文件夹,但问题仍然存在。

例如,我将文件移动到另一个文件夹并提交了(移动的)更改。

但是我不能git rm name得到“不匹配”的文件夹 git rmdir name不存在。

我可以做一个git clean -f folder,但它是如何被推高的?

我可以直接rm删除该文件,但是如何正确删除该目录并将其推送到存储库,然后在其他人拉取时将其发送给其他人,以便删除现有文件夹?

4

4 回答 4

139

简短的回答:您不能将更改推送到目录(添加、删除等),因为 Git 不会自行跟踪目录

根据常见问题解答

目前 git 索引(暂存区)的设计只允许列出文件,并且没有足够能力进行更改以允许空目录的人足够关心这种情况来补救它。

在目录中添加文件时会自动添加目录。也就是说,目录永远不必添加到存储库中,并且不会自行跟踪。

因此,就 Git 而言,您的空目录不再存在。

我发现养成使用习惯可以git clean -fd消除推动删除目录的需要。但是,git clean可以删除您可能不想删除的项目(包括您尚未提交的任何新文件),因此我倾向于首先使用git clean -fdn查看如果我使用该命令将删除的内容。

看起来您可能被迫与其他开发人员交谈以清理该目录。

于 2012-04-09T15:24:20.480 回答
11
git add --all
git clean -f -d
git commit -m "trying to remove folders"
git push
于 2016-02-28T00:14:45.850 回答
-1

您不能推送空文件夹。但是,如果您想清除克隆/本地存储库中的空文件夹,请提交您的最新更改。然后只需删除本地副本中 .git 文件夹之外的所有文件。然后再次重置所有更改,这会放回所有文件,但会留下它不跟踪的空目录。

于 2016-07-26T10:53:43.903 回答
-9

解决这个问题的一个稍微笨拙的方法是在目录中创建一个假文件,提交它,然后删除它。删除它也会删除该目录。所以创建 name/fake.txt

git add name/fake.txt
git commit -m "message"
git rm name/fake.txt
git commit -m "message2"
于 2014-07-29T15:04:02.337 回答