【问题标题】:Cannot remove .git: Directory not empty无法删除 .git:目录不为空
【发布时间】:2021-02-27 07:41:29
【问题描述】:

无法删除.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,都没有成功。

【问题讨论】:

  • 我猜你可能有一个除 git 之外的进程正在访问这个 git repo。尝试找出创建这些文件的原因并终止或暂时禁用该进程。
  • @ewong 这就是我想要做的,但我知道这样做没有简单的方法......
  • FUSE 是user-space file system framework。这意味着您的 Git 存储库中有一个挂载点。您需要撤消安装。
  • FUSE 是一个框架,但在 Linux 上,您不需要将设备挂载为文件系统。 mount 命令将显示现有的挂载。 (也许您的存储库是在 FUSE 挂载下,而不是包含一个?也许有问题的用户空间文件系统也有问题。)
  • @DeathWaltz:如果你重命名 .git 会发生什么。新文件还会自己神秘地出现在那里吗?

标签: bash git delete-file fuse rm


【解决方案1】:

您可以使用fuser 命令。

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

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

fuser .git

之后你可以使用-k参数杀死进程,然后你应该可以删除目录了。

fuser -k .git

【讨论】:

  • 你的意思是fuser --kill <filename>
  • 你可以这样做,或者你可以先使用verbose -v参数进行调查,然后再决定。
  • 堆栈溢出的意义不仅在于帮助用户解决当前的问题,还可以帮助未来的用户解决相同的问题。因此,如果您可以在回答中提供该详细信息,那不仅对我有帮助,对有类似问题的后代也有帮助。
  • 这似乎已经修复了它,但并不完全确定。如果问题仍然存在并且这不起作用,我会回来的。
  • 关闭终端对我有用。它杀死了继续写入fuse_hidden 文件的进程,我能够rm -rf .git
猜你喜欢
  • 2019-05-02
  • 1970-01-01
  • 2010-12-29
  • 2014-03-13
  • 1970-01-01
  • 2010-09-09
  • 2020-09-19
  • 1970-01-01
相关资源
最近更新 更多