如何在本地删除空文件夹,并让通过拉推共享远程的其他协作者也发生这种情况? 我知道 git 不会在这个意义上“跟踪”文件夹,但问题仍然存在。
例如我将文件移动到另一个文件夹并提交了(移动的)更改。
但是我不能
git rm name
文件夹,因为我得到“不匹配”
git rmdir name
不存在。
我可以做一个
git clean -f folder
,但是如何将其推高?
我可以直接
rm
文件,但如何正确完成目录删除并将其推送到存储库,然后在其他人拉取时将其发送给其他人,以便删除其现有文件夹。
简短的回答:您无法将更改推送到目录(添加、删除等),因为 Git 不会自行跟踪目录。
根据常见问题解答:
目前 git 索引(暂存区)的设计只允许列出文件,没有人有足够的能力进行更改以允许空目录,并且足够关心这种情况并进行补救。
在目录中添加文件时会自动添加目录。也就是说,目录永远不必添加到存储库中,并且不会自行跟踪。
所以对于 Git 来说,你的空目录已经不存在了。
我发现养成使用
git clean -fd
的习惯可以消除推动删除目录的需要。但是,git clean
可以删除您可能不想删除的项目(包括您尚未提交的任何新文件),因此我倾向于首先使用git clean -fdn
来查看如果我使用该命令,将被删除。
看起来您可能被迫与其他开发人员交谈才能清理该目录。
git add --all
git clean -f -d
git commit -m "trying to remove folders"
git push
您无法推送空文件夹。 但是,如果您想清除克隆/本地存储库中的空文件夹,请提交最新更改。然后只需删除本地副本中除 .git 文件夹之外的所有文件即可。然后再次重置所有更改,这会放回所有文件,但会留下它不跟踪的空目录。
解决此问题的一种巧妙方法是在目录中创建一个虚拟文件(假设
folderNameToRemove
),提交它,然后删除它。删除它也会删除该目录。
例如,在目录中创建
blank
文件。然后,
git add folderNameToRemove/blank
git commit --message="fix: empty folder removal"
git rm -r folderNameToRemove
git commit --amend --no-edit --allow-empty
--allow-empty
是必需的参数。 Git 将跟踪提交,就好像您没有提交任何内容一样,作为 git add
和 git rm
命令的最终结果。--amend
参数是可选的,但它提供了更清晰的提交,并链接到前一个正确的提交。--no-edit
参数与 --amend
一起是可选的,但它可以减少更改前一个提交的元数据的“复杂”要求。