.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
,都没有成功。
您可以使用
fuser
命令。
fuser
是一个命令行实用程序,旨在根据特定进程正在访问的文件、目录或套接字定位进程。它帮助系统用户识别使用文件或套接字的进程。
在
fuser
目录上使用 .git
命令,查找正在访问该目录的所有进程 ID。
fuser .git
之后可以使用
-k
参数杀掉进程,然后应该就可以删除目录了。
fuser -k .git
我最近发现的另一个解决方案是使用
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”
知道到底是什么导致了这个特定的错误(gitstatusd),
你可以的,
killall -15 gitstatusd-linux-x86_64
这通常是大多数 zsh 主题使用的 gitstatusd 的问题。
关闭终端也有效,因为 zsh 是终端的子进程,而 gitstatusd 是 zsh 的子进程。