我從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目前還不支持。 –