tl; dr JGit di checkout
genera eccezioni mentre la linea di comando git checkout
funziona beneJGit cassa vs `problemi checkout` git
Attualmente sto cercando di utilizzare JGit di controllare alcune revisioni da un repository Git on-line, in Java (per lavoro). Il mio approccio attuale è (e io sono molto nuovo a Git, proveniente da un background SVN, quindi questo potrebbe essere sbagliato):
- clone del repository in una posizione temporanea sul mio disco rigido
- capire quale revisione che voglio, (ho provato a usare l'hash SHA-1 e il nome di un ramo)
- checkout che revisione
- da lì, vorrei utilizzare i file estratti come input per una parte successiva di il programma.
- checkout una revisione diversa
- uso tali file come input per un'altra parte del programma
In sostanza, voglio essere in grado di scambiare il contenuto della mia cartella Temp con qualsiasi revisione. Con l'interfaccia a riga di comando sono stato in grado di farlo con git checkout master
e git checkout dylanbranch
(dove dylanbranch è un ramo che ho creato sul mio clone con una revisione scelta arbitrariamente), ma il mio codice Java tenta di fare la stessa cosa non riesce:
Git git = Git.open(new File("checkout")); //checkout is the folder with .git
git.checkout().setName("master").call(); //succeeds
git.checkout().setName("dylanbranch").call(); //fails
e le eccezioni stampato sulla console:
Exception in thread "main" org.eclipse.jgit.api.errors.JGitInternalException: Checkout conflict with files:
src/sizzle
test/qunit
at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:211)
at com.avi.scm.git.BranchCheckout.main(BranchCheckout.java:30)
Caused by: org.eclipse.jgit.errors.CheckoutConflictException: Checkout conflict with files:
src/sizzle
test/qunit
at org.eclipse.jgit.dircache.DirCacheCheckout.checkout(DirCacheCheckout.java:387)
at org.eclipse.jgit.api.CheckoutCommand.call(CheckoutCommand.java:162)
... 1 more
posso verificare che i file in questione sono contrassegnati come eliminati e non messo in scena per commettere utilizzando git status
anche se non sono sicuro perché tali modifiche sono lì, e ritornano ogni volta che torno al master. Nonostante ciò, posso ancora cambiare con successo l'albero di lavoro con la riga di comando Git.
Quindi la mia domanda: Perché JGit non funzionerà per questa applicazione quando verrà eseguito il comando git? Qualsiasi altra informazione utile è appreciated- mi educare :)
Aggiornamento ho provato con il repository jQuery, e hanno notato un paio di problemi con JGit: Quando sto lavorando con il ramo "master", git status
mi dice che sono #On branch master
e che c'è nothing to commit (working directory clean)
, ma usando il comando di stato di JGit vedo che test/qunit
e src/sizzle
sono contrassegnati come Missing
. Il reset di JGit sembra non fare nulla.
Grazie per i collegamenti, +1 Per chiunque altro stia cercando di fare la stessa cosa, il mio attuale piano di attacco è quello di commettere i "cambiamenti" che JGit vede solo così posso controllare altre cose. (Essenzialmente ignorando i sottomoduli, proprio come JGit) – Dylan
Puoi provare la versione di JGit [qui] (https://hudson.eclipse.org/hudson/job/jgit/855/artifact/org.eclipse.jgit.packaging/org. eclipse.jgit.updatesite/target/site/plugins/org.eclipse.jgit_1.2.0.201109151733.jar) e vedi se ottieni le stesse eccezioni di conflitto? –
Questa versione più recente risolve il mio problema (sebbene il comando clone ora si interrompa quando si tenta di sovrascrivere/aggiornare il clone esistente). – Dylan