git-如何删除空文件夹并推送更改?


75

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

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

但是我找不到git rm name“不匹配”文件夹,所以 git rmdir name不存在。

我可以做,git clean -f folder但是怎么推高呢?

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


1
您是什么意思,问题仍然存在?
manojlds 2012年

Answers:


121

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

根据常见问题解答

当前,git索引(临时区域)的设计仅允许列出文件,并且没有足够的能力进行更改以允许空目录的人对此情况已经足够在意,以进行补救。

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

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

我发现养成使用的习惯,git clean -fd不再需要推动删除目录。但是,git clean可以删除你可能不希望删除的项目(包括你还没有提交任何新文件),所以我倾向于第一次使用git clean -fdn,看看有什么,如果我使用以下命令删除。

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


水银在这里有一个理智的做法-该目录删除,如果空: stackoverflow.com/a/3917322/913223superuser.com/questions/81204/...
丹尼尔Sokolowski

1
这个答案是不完整的。该git svn fetch不会维持空文件夹。git svn rebase如果只删除一个文件夹,甚至可以重新创建一个空文件夹。
安德里(Andry)

@DanielSokolowski是在git中使用的相同方法,克隆存储库时至少要这样做。我发现克隆一个包含空目录的仓库时,git不会创建空目录。这不是一个大问题,因为现在我必须检查该目录是否存在以写入文件?
alpha_989 '18 -4-7


-1

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


1
或只使用git clean -fd
亚伦弗兰克

-9

解决此问题的一种小技巧是在目录中创建一个伪文件,将其提交,然后将其删除。删除它也会删除目录。因此,创建名称/fake.txt

git add name/fake.txt
git commit -m "message"
git rm name/fake.txt
git commit -m "message2"

3
这种方法实际上确实有效,但是在第二步中,您想要删除包含文件的文件夹rm -rf name然后提交更改,该文件夹现在将消失
igniteflow

2
创建不必要的提交
joel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.