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

问题描述 投票:0回答:4

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

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

但是我不能

git rm name
文件夹,因为我得到“不匹配”
git rmdir name
不存在。

我可以做一个

git clean -f folder
,但是如何将其推高?

我可以直接

rm
文件,但如何正确完成目录删除并将其推送到存储库,然后在其他人拉取时将其发送给其他人,以便删除其现有文件夹。

git directory rm rmdir
4个回答
159
投票

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

根据常见问题解答

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

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

所以对于 Git 来说,你的空目录已经不存在了。

我发现养成使用

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

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


15
投票
git add --all
git clean -f -d
git commit -m "trying to remove folders"
git push

0
投票

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


-6
投票

解决此问题的一种巧妙方法是在目录中创建一个虚拟文件(假设

folderNameToRemove
),提交它,然后删除它。删除它也会删除该目录。

例如,在目录中创建

blank
文件。然后,

git add folderNameToRemove/blank
git commit --message="fix: empty folder removal"
git rm -r folderNameToRemove
git commit --amend --no-edit --allow-empty
  • 如果您正在考虑以下 2 个参数,则
    --allow-empty
    是必需的参数。 Git 将跟踪提交,就好像您没有提交任何内容一样,作为
    git add
    git rm
    命令的最终结果。
  • 第二次提交中的
    --amend
    参数是可选的,但它提供了更清晰的提交,并链接到前一个正确的提交。
  • 第二次提交中的
    --no-edit
    参数与
    --amend
    一起是可选的,但它可以减少更改前一个提交的元数据的“复杂”要求。
© www.soinside.com 2019 - 2024. All rights reserved.