如何在没有 rm -rf 大锤的情况下删除单个 git 存储库克隆?

How to delete a single git repository clone, without the rm -rf sledgehammer?

无法简单地使用 rm -r 删除 git 存储库,因为 .git 目录包含许多写保护文件。我有权限删除这些,因为我是所有者,但无法一一确认。

现在,通过将 -f 标志添加到 rm 可以在一个命令中完成所有操作,但这意味着我失去了所有保护措施,防止删除有充分理由保护的内容。例如,另一个 git 存储库,其中包含我尚未推送的本地分支。

但这似乎是唯一的办法,所以我发现自己最近rm -rf做的很多,但我总是对此感到不安。有没有更好的方法来摆脱单个 repo 克隆,它不会询问数千个单独的文件,但如果我尝试擦除单个 repo 以外的东西,will 会失败?理想情况下,在实际删除之前,它还应该检查我要删除的 repo 是否有一些最新的远程。


我不太明白这个问题有什么不清楚的……是这样的:

如何删除包含所有内容的存储库,使用的命令不会同时核对任何其他包含写保护文件的目录?

首先,您收集所有垃圾对象:

git gc --prune=all

那么只剩下一个pack文件,是只读的,对应的pack index,也是只读的。现在

cd ..
rm -r repo

只会要求确认两次,而不是数千次。

不过,这并不能防止删除已签出的子模块。

您可以在 .bashrc:

中创建一个 bash 函数
function rmgit() {
    # Recursively apply write permissions to files in the .git folder
    chmod -R +w "/.git"
    # Remove the clone
    rm -r ""
}

开始新的 shell,您现在应该能够:

rmgit /path/to/clone