当前位置: 首页 > 面试题库 >

通过JGit克隆存储库后如何释放文件系统锁

云宾鸿
2023-03-14
问题内容

我正在按照以下指南使用jGit克隆远程现有存储库:

https://github.com/centic9/jgit-
cookbook/blob/master/src/main/java/org/dstadler/jgit/porcelain/CloneRemoteRepository.java

我在示例中使用CFML:

Git = createObject( 'java', 'org.eclipse.jgit.api.Git' );

localPath = createObject( 'java', 'java.io.File' ).init( expandPath( 'temp' ) );

result = Git.cloneRepository()
        .setURI( 'https://github.com/github/testrepo.git' )
        .setDirectory( localPath )
        .call();

result.close();

克隆的效果很好,但是在temp\.git\objects\pack我停止Java进程之前,文件锁不会释放在其中的“打包”文件上。

然后我还注意到关于结果.close()方法的行为,API文档似乎有点一厢情愿。:http
:
//download.eclipse.org/jgit/site/4.0.1.201506240215-r/apidocs/org/eclipse/jgit/
lib /
Repository.html#close()

减少使用次数,并可能关闭资源。

也许?那是什么意思?为了“放弃任何基础资源”(在AutoCloseable.close()方法帮助实现的接口中指定),我需要做什么?

关于SO有两个类似的问题,但是没有一个问题涉及使用静态方法org.eclipse.jgit.api.Git来克隆新的仓库。


问题答案:

因此,从字面上看,经过几天的戳后,我点击了“提交”,我偶然发现了我认为的答案。

食谱示例仅调用.close()上的结果的方法cloneRepository()call()方法(A
Git实例)。API文档指出该方法还应该调用.close基础Repository实例的方法:

http://download.eclipse.org/jgit/site/4.0.1.201506240215-r/apidocs/org/eclipse/jgit/api/Git.html#close()

如果存储库是由此类中的静态工厂方法打开的,则此方法将在基础存储库实例上调用Repository.close()。

但是,我发现如果自己获取Repository实例并调用其.close()方法,则会释放所有文件系统锁。我认为这是我遵循的JGit菜谱参考中的遗漏,并将提交问题/建议。

这是有效的CFML代码。请注意.close()底部的两个呼叫。

Git = createObject( 'java', 'org.eclipse.jgit.api.Git' );

localPath = createObject( 'java', 'java.io.File' ).init( expandPath( 'temp' ) );

result = Git.cloneRepository()
        .setURI( 'https://github.com/github/testrepo.git' )
        .setDirectory( localPath )
        .call();

result.getRepository().close();
result.close();


 类似资料:
  • 我试图克隆一个包含一个大文件(2GB以上)的存储库,因为本文提到Jgit可以处理的文件的最大大小是2GB。我看到通过pure git命令,我可以使用过滤大文件,现在我希望在使用Jgit的java代码中实现这个过滤器,这样我就可以避免异常目前我使用Jgit进行克隆,如下所示: 我想知道是否有选项添加过滤器到克隆,这样它就可以避免使用JGIT克隆大文件?

  • 当我尝试使用JGit api克隆现有的远程git存储库时,出现以下错误。 例外:org。日食jgit。应用程序编程接口。错误。运输例外:http://admin@本地主机:7990/scm/cp/myrepo。git安全连接到https://admin@本地主机:7990/scm/cp/myrepo。由于SSL问题,无法建立git 在我的课堂上,我使用下面的方法来克隆存储库。 我知道我可以通过使用

  • 问题内容: 我真的很坚持这一点。我在哈德森(Hudson)创建了一个工作,并以与其他工作相同的方式进行了配置。我的项目和构建交付物存在于Git中。但是每次我尝试构建它时,都会出现以下错误: 在其他线程中,有人建议通过以jenkins用户身份登录来创建不同的私钥-公钥对,但我什至不知道如何在终端中执行此操作。我的意思是我知道如何使用“ sudo”命令以不同的用户身份登录,但我不认为有人建议使用sud

  • 本文向大家介绍Git 克隆SVN存储库,包括了Git 克隆SVN存储库的使用技巧和注意事项,需要的朋友参考一下 示例 您需要使用以下命令创建存储库的新本地副本 git svn clone SVN_REPO_ROOT_URL [DEST_FOLDER_PATH] -T TRUNK_REPO_PATH -t TAGS_REPO_PATH -b BRANCHES_REPO_PATH 如果您的SVN储存库

  • 这里的问题是,URL 被重定向,这在 JGit 中不处理。没有相同的错误报告,并且还提到它们已得到解决,但我仍然面临此问题。如果我做错了什么,请告诉我。 代码片段 运行代码后出现异常 更改以下代码后 例外 详情: 使用以下 JGit 版本 4.8.0.201706111038-r 也尝试了4.4.x.xxxxx版本

  • 在github上,您可以查看到存储库的流量,如下所示: 现在我的问题是关于克隆体和独特克隆体的巨大差异。如果我对此理解正确的话,那就意味着4919人创造了22.374个克隆人。为什么有些人会克隆一个存储库这么多次? 我的实际回购看起来不那么令人印象深刻,但差异仍然很大。(150ish克隆大约30个唯一克隆,所以每个克隆者取5个克隆)。 这让我想知道什么算克隆。如果它是相关的,那么它是针对go库的,