我从Retrieve specific commit from a remote Git repository知道可以从远程git存储库提取特定的提交。如何使用JGit获取特定提交
但是,试图从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.
嗯,我想设置'RefSpec',但JGit无法找到它,因为它是'RevCommit'的SHA,而不是分支或标签的'RefSpec'。但是,使用正常的git命令,我可以根据原始问题获取特定的提交SHA。我查看了'FetchProcess'的代码,它确实调用'conn.getRef(spec.getSource())',它只看'advertisedRefs',所以看起来它并没有在JGit中实现 –
还有一个事情,你引用的问题的接受答案是从2014年。根据http://stackoverflow.com/a/30701724/552396,似乎我在我的问题中描述的功能是在2015年实施的,它的描述很好在我的问题开始时提到的问题。我真的希望它在JGit中实现。将尝试发送到开发邮件列表,看看是否有计划。 –
感谢您指出这一点。我假设JGit的低层API可以用来获取某些提交,但是FetchCommand目前还不支持。 –