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

Java jgit-Delete.git目录(或获取没有它的文件),java,git,jgit,Java,Git,Jgit,我需要用java克隆一个git回购。我正在使用它 我使用的代码行是: Git clone = Git.cloneRepository().setURI(URIofRepo).setDirectory(localPath).call(); UrioRepo所在地:指向我的回购的github链接 和 其中localPath是:我希望进行克隆的目录 这很好用。但是,由于我正在执行的项目的使用不需要克隆来继续工作,因此我只希望克隆具有github repo的内容,而不需要.git目录 我还尝试使用以下

我需要用java克隆一个git回购。我正在使用它

我使用的代码行是:

Git clone = Git.cloneRepository().setURI(URIofRepo).setDirectory(localPath).call();
UrioRepo所在地:指向我的回购的github链接 和 其中localPath是:我希望进行克隆的目录

这很好用。但是,由于我正在执行的项目的使用不需要克隆来继续工作,因此我只希望克隆具有github repo的内容,而不需要.git目录

我还尝试使用以下方法:

    File dirToDelete = new File (path   + "/.git");
    FileUtils.deleteDirectory(dirToDelete);
但是,我收到一个IO异常,表示我无法删除文件,如下所示:

线程“main”java.io.IOException中出现异常:无法删除文件: C:\testing\testRepo1.git\objects\pack\pack-7ca7f11688adda065d62f3394d0e05346beff22.pack


当前eclipse进程可能会在包文件上保留一个句柄,以防止其被删除。
正如建议的那样:


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

另一种方法是通过下载GitHub repo的归档文件

或者使用JGit从当前本地repo创建存档(请参阅),并解压缩该存档以供使用。

您的.close()是否会产生效果取决于存储库的创建方式。因此,即使您在Git实例上调用close,它也可能释放资源,也可能不释放资源。在我意识到这一点之前,我浪费了很多时间

来自Jgit文档:

如果存储库是由此类中的静态工厂方法打开的,则此方法将在基础存储库实例上调用repository.close()。(这是否实际释放了底层资源,如文件句柄,可能会有所不同;有关更多详细信息,请参阅存储库。)


如果存储库是由调用方创建的,并传递到此类中的Git(存储库)或静态工厂方法,则此方法不会调用基础存储库上的close。

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

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

 FileUtils.deleteDirectory(dirToDelete, 1);
这是delete()文档所说的:

公共静态void delete(文件f,int选项)引发IOException 删除文件或文件夹

参数:f-要删除的文件

选项-删除选项,递归用于递归删除子树,删除失败时重试重试。如果基础文件系统不允许删除其他线程正在读取的文件,重试可能会有所帮助


您可以始终维护一个裸镜像副本(不允许每次克隆),并使用jgit的等价物
git archive
。如果打开的文件句柄阻止删除文件,请确保关闭init返回的存储库:
clone.getRepository().close()
@Rüdigermann很好。我已将其包含在答案中以提高可见性。谢谢!:)正是我要找的!
 FileUtils.deleteDirectory(dirToDelete, 1);