2015-10-23 306 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