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

o8x7eapl  于 2023-04-10  发布在  Git
关注(0)|答案(3)|浏览(218)

无法删除.git

我有一个git仓库Rift,我试图删除它。在尝试运行rm -rf时,我得到错误:rm: cannot remove 'Rift/.git/objects/pack': Directory not empty
当我导航到目录树的底部时,我发现了一个名为.fuse_hidden的隐藏文件,后面跟着一串数字和字母,可能是十六进制的。我可以手动删除这个文件,但是一旦我删除了它,就会在它的位置上创建另一个附加了不同的数字和字母串的文件。
我试过rm .git/objects/pack/* && rm -rf .gitsudo rm -rf .gitchmod -w .git/objects/pathkillall git,没有一个成功。

nkkqxpd9

nkkqxpd91#

您可以使用fuser命令。
fuser是一个命令行实用程序,用于根据特定进程正在访问的文件、目录或套接字来定位进程。它帮助系统用户使用文件或套接字来识别进程。
.git目录上使用fuser命令,查找正在访问该目录的所有进程ID。
fuser .git
然后,您可以使用-k参数终止进程,然后您应该能够删除目录。
fuser -k .git

wqsoz72f

wqsoz72f2#

我最近发现的另一个解决方案是使用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。然后使用-s 9标志将此PID传递给kill,这意味着发送信号“SIGKILL”,而不是默认的更礼貌的请求“SIGTERM”或潜在的“SIGHUP”

wbgh16ku

wbgh16ku3#

知道是什么导致了这个特定的错误(gitstatusd),
你能做的

killall -15 gitstatusd-linux-x86_64

这通常是大多数zsh主题使用的gitstatusd的问题。
关闭终端也可以工作,因为zsh是终端的子进程,gitstatusd是zsh的子进程。

相关问题