【问题标题】:JGit Removing a git repositoryJGit 删除 git 存储库
【发布时间】:2016-01-22 10:36:18
【问题描述】:

我正在使用 JGit 使用以下代码克隆远程 git 存储库。

 localRepo = new FileRepository(path+"/.git");
 git = new Git(localRepo);
 clone = Git.cloneRepository().setURI(url).setBranch(branch)
                .setDirectory(new File(path)).call();
 clone.getRepository().close();
 clone.close();
 git.getRepository().close();

克隆下一个仓库后,由于我需要删除目录,所以我使用下面的代码。

 File tempGitDirectory;
        try {
            tempGitDirectory = new File(dirPath);
            if(tempGitDirectory.exists()){
                FileUtils.deleteDirectory(tempGitDirectory);
            }
        } catch (IOException e) {

        }

在我的 Mac 上,一切正常。但是在尝试使用 redhat linux 机器时,我无法完全删除 repo。失败并出现以下错误。

 rm: cannot remove `git//TestGit/.nfs000000000011f6d40000032a': Device or    resource busy

有什么线索吗?

【问题讨论】:

    标签: java linux git github jgit


    【解决方案1】:

    确保您的密码不在您要删除的路径中。

    来自this thread

    当某个已删除的文件仍被某个进程打开时,就会发生这种情况。这是 NFS 如何在幕后工作的产物。
    如果文件仍然打开,NFS 服务器实际上无法删除文件。

    Linux 内核可以轻松地使用本地磁盘文件执行此操作——即使在与所有目录取消链接后,inode 仍然保留,并且当最后一个打开文件的进程终止时,inode 会被释放。
    但是,这不适用于 NFS,因此 NFS 服务器会保留这个代表打开文件的虚假目录条目,并且当打开此文件的任何进程终止时,它将自动删除。

    检查 lsof 以查看正在使用该文件夹的进程。

    OP Upen 确认in the comments

    我为克隆的 repo 打开了一个pom.xml 阅读器。
    FileReader 没有关闭。现在工作正常。

    【讨论】:

    • 感谢@VonC。我为克隆的 repo 打开了一个 pom.xml 阅读器。 FileReader 未关闭。现在工作正常。感谢您的帮助。
    • @Upen 太棒了!我已将您的评论包含在答案中以提高知名度。
    猜你喜欢
    • 1970-01-01
    • 2012-11-28
    • 2011-09-21
    • 2018-07-17
    • 2019-05-27
    • 2011-01-23
    • 1970-01-01
    • 2016-02-01
    • 2019-12-09
    相关资源
    最近更新 更多