Ich weiß aus Retrieve specific commit from a remote Git repository, dass es möglich ist, ein bestimmtes Commit von einem Remote-Git-Repository abrufen.Wie bekomme ich einen bestimmten Commit mit JGit
Wenn Sie dies jedoch von JGit aus versuchen, schlägt es fehl. Wenn ich für dasselbe Repository git fetch origin 57eab609d9efda3b8ee370582c3762c0e721033d:HEAD
vom Terminal aus starte, wird das gewünschte Commit (mit allen seinen Vorfahren) aus dem Remote-Repository abgerufen. Allerdings, wenn ich die folgende Verwendung JGit laufen, ich eine Ausnahme erhalten:
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();
Die Ausnahme org.eclipse.jgit.errors.TransportException: Remote does not have 57eab609d9efda3b8ee370582c3762c0e721033d available for fetch.
Nun, ich versuche die 'RefSpec' zu setzen, aber JGit kann sie nicht finden, da es die SHA des' RevCommit' ist, nicht die 'RefSpec' einer Verzweigung oder eines Tags. Mit normalem git-Befehl kann ich jedoch mit spezifischem commit SHA wie bei der ursprünglichen Frage abrufen. Ich schaute auf den Code von 'FetchProcess', und es ruft' conn.getRef (spec.getSource()) 'auf, das nur auf die' beworbenenRefs' schaut, so scheint es, dass es nicht in JGit schließlich –
Ein mehr implementiert wird Die akzeptierte Antwort auf die Frage, auf die Sie verwiesen haben, stammt aus dem Jahr 2014. Laut http://stackoverflow.com/a/30701724/552396 scheint es, dass die Funktionalität, die ich in meiner Frage beschrieben habe, im Jahr 2015 implementiert wurde, und es ist gut in beschrieben die Frage, auf die ich zu Beginn meiner Frage hingewiesen habe. Ich wünschte wirklich, dass es in JGit implementiert wurde. Wird versuchen, an die Mailingliste von Dev zu senden, um zu sehen, ob es Pläne dafür gibt. –
Vielen Dank, dass Sie darauf hingewiesen haben. Ich nehme an, dass die Low-Level-APIs von JGit verwendet werden können, um bestimmte Commits abzurufen, der FetchCommand unterstützt dies jedoch noch nicht. –