无法删除 .git:目录不为空

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

无法删除
.git

我有一个 git 存储库,

Rift
,我正试图删除它。尝试运行
rm -rf
时,出现错误:
rm: cannot remove 'Rift/.git/objects/pack': Directory not empty
.

当我导航到目录树的底部时,我发现了一个名为

.fuse_hidden
的隐藏文件,后跟一串数字和字母,可能是十六进制的。我可以手动删除这个文件,但是一旦我删除它,就会在它的位置创建另一个带有不同数字和字母字符串的文件。

我试过

rm .git/objects/pack/* && rm -rf .git
sudo rm -rf .git
chmod -w .git/objects/path
killall git
,都没有成功。

bash git delete-file fuse rm
3个回答
7
投票

您可以使用

fuser
命令。

fuser
是一个命令行实用程序,旨在根据特定进程正在访问的文件、目录或套接字定位进程。它帮助系统用户识别使用文件或套接字的进程。

fuser
目录上使用
.git
命令,查找正在访问该目录的所有进程 ID。

fuser .git

之后可以使用

-k
参数杀掉进程,然后应该就可以删除目录了。

fuser -k .git


1
投票

我最近发现的另一个解决方案是使用

lsof
命令,使用受影响的文件名作为参数。例如:

#This will give you information about what process has the file open
[root@host]$ lsof .git/objects/pack/.fuse_hidden000000000f1f
#This will kill the process locking the file
[root@host]$ kill -s 9 $(lsof -t .git/objects/pack/.fuse_hidden000000000f1f)

-t
开关告诉 lsof 使用“简洁”模式,只返回 PID。 然后使用
kill
标志将此 PID 传递给
-s 9
,这意味着发送信号“SIGKILL”而不是默认的更礼貌的请求“SIGTERM”或潜在的“SIGHUP”


0
投票

知道到底是什么导致了这个特定的错误(gitstatusd),

你可以的,

killall -15 gitstatusd-linux-x86_64

这通常是大多数 zsh 主题使用的 gitstatusd 的问题。

关闭终端也有效,因为 zsh 是终端的子进程,而 gitstatusd 是 zsh 的子进程。

© www.soinside.com 2019 - 2024. All rights reserved.