2015-10-23 253 views
0

我正在使用JGit使用下面的代码克隆远程git仓库。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时,我无法完全删除回购站。遇到下面的错误。

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

任何线索?

回答

1

确保您的pwd不在您尝试删除的路径中。

this thread

这发生在已删除的文件仍是一些进程打开。这是NFS如何在幕后工作的人为因素。
如果某个文件仍然打开,NFS服务器不能实际删除文件。

Linux内核可以使用本地磁盘文件很容易地完成它 - 即使从所有目录中断开连接后,inode仍然保留,并且当打开文件的最后一个进程终止时,inode被释放。
但是,这不适用于NFS,因此NFS服务器会保留这个代表打开文件的虚假目录条目,并且当打开此文件的任何进程终止时它将自动删除。

检查lsof以查看使用该文件夹的过程。

OP Upen确认in the comments

我开了一家pom.xml阅读器的克隆回购。
FileReader未关闭。现在工作正常。

+0

Thanks @VonC。我为克隆的回购打开了一个pom.xml阅读器。 FileReader未关闭。现在工作正常。感谢你的帮助。 – Upen

+0

@非常棒!我已将您的评论纳入答案中,以获得更多的知名度。 – VonC