如何使用JGit获取特定的提交

时间:2017-02-12 17:52:20

标签: git jgit

我从Retrieve specific commit from a remote Git repository知道可以从远程git存储库获取特定的提交。

然而,试图从JGit这样做,它失败了。对于同一个存储库,当我从终端运行git fetch origin 57eab609d9efda3b8ee370582c3762c0e721033d:HEAD时,从远程存储库中获取我想要的提交(及其所有祖先)。但是,当我使用JGit运行以下命令时,我得到一个例外:

RefSpec refSpec = new RefSpec()
    .setSourceDestination(commitId, HEAD)
    .setForceUpdate(true);
refs = Lists.newArrayList(refSpec);
git.fetch().setRemote(GIT_REMOTE_NAME)
    .setTimeout(REMOTE_FETCH_TIMEOUT)
    .setTransportConfigCallback(transportConfigurer)
    .setCredentialsProvider(gitCredentials)
    .setTagOpt(TagOpt.FETCH_TAGS)
    .setRefSpecs(refs)
    .call();

例外是org.eclipse.jgit.errors.TransportException: Remote does not have 57eab609d9efda3b8ee370582c3762c0e721033d available for fetch.

1 个答案:

答案 0 :(得分:2)

使用Git瓷器命令,您只能获取引用,而不是特定的提交。另见:Fetch specific commit from remote git repo

您引用的帖子仅说明如何从远程获取特定引用(在给定示例中为refs/remotes/origin/branch)。我无法查看特定提交(参考号未提及)的位置。

同样适用于JGit:需要为FetchCommand提供refspec(因此名称为setRefSpecs())来获取。有了这些信息,JGit将获取refspec指向的提交及其所有祖先。