jgit - 删除.git目录(或获取没有它的文件)

Sli*_*ppy 4 java git jgit

我需要在java中克隆一个git repo.我正在使用jGit.

我正在使用的代码行是:

Git clone = Git.cloneRepository().setURI(URIofRepo).setDirectory(localPath).call();
Run Code Online (Sandbox Code Playgroud)

其中URIofRepo是:我的repo的github链接和localPath的位置:我希望克隆发生的目录.

这非常有效.但是,由于我正在使用的项目不需要克隆来继续工作,我只是希望克隆具有github repo的内容而没有.git目录.

我也试过使用以下内容:

    File dirToDelete = new File (path   + "/.git");
    FileUtils.deleteDirectory(dirToDelete);
Run Code Online (Sandbox Code Playgroud)

但是我得到一个IO异常,说我无法删除该文件,如下所示:

线程"main"中的异常java.io.IOException:无法删除文件:C:\ testing\testRepo1.git\objects\pack\pack-7ca7f11688adda065d62f3394d0e055346beff22.pack

Von*_*onC 5

当前的eclipse进程可能会对pack文件进行处理,从而阻止其删除.
作为吕迪格赫尔曼提出的意见:

如果打开文件句柄阻止文件被删除,请确保关闭由init以下方法返回的存储库:

clone.getRepository().close()
Run Code Online (Sandbox Code Playgroud)

另一种方法是通过其归档链接下载GitHub仓库的存档.

或者使用JGit从当前本地仓库创建存档(请参阅参考资料ArchiveTest.java),然后解压缩该存档以供您使用.


Vis*_*hal 5

即使尝试以下操作后,无法删除本地存储库的问题仍然存在:

clone.getRepository().close()
Run Code Online (Sandbox Code Playgroud)

在调用 delete() 时将“options”值设置为 RECURSIVE delete 后,我可以修复该问题并成功删除本地存储库,如下所示:

 FileUtils.deleteDirectory(dirToDelete, 1);
Run Code Online (Sandbox Code Playgroud)

这是delete()文档所说的:

public static void delete(File f, int options) throws IOException 删除文件或文件夹

参数: f - 要删除的文件

options - 删除选项,RECURSIVE 用于递归删除子树,RETRY 用于删除失败时重试。如果底层文件系统不允许删除另一个线程正在读取的文件,重试可能会有所帮助。