我从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.
答案 0 :(得分:2)
使用Git瓷器命令,您只能获取引用,而不是特定的提交。另见:Fetch specific commit from remote git repo
您引用的帖子仅说明如何从远程获取特定引用(在给定示例中为refs/remotes/origin/branch
)。我无法查看特定提交(参考号未提及)的位置。
同样适用于JGit:需要为FetchCommand
提供refspec(因此名称为setRefSpecs()
)来获取。有了这些信息,JGit将获取refspec指向的提交及其所有祖先。