tl; dr JGit de checkout
lanza excepciones, mientras que la línea de comandos git checkout
funciona bienJGit pago y envío vs `problemas checkout` git
Actualmente estoy tratando de usar JGit de revisar algunas revisiones desde un repositorio Git en línea, en Java (para el trabajo). Mi enfoque actual es (y yo soy muy nuevo en Git, que viene de un fondo SVN, por lo que esto puede ser malo):
- clon del repositorio en una ubicación temporal en el disco duro
- averiguar qué revisión que quiero, (he intentado usar el hash SHA-1 así como el nombre de una rama)
- pago y envío esa revisión
- desde allí, estaría utilizando los archivos desprotegidos como entradas a una parte posterior de el programa.
- pago y envío de una revisión diferente
- uso esos archivos como entradas a otra parte del programa
Esencialmente, quiero ser capaz de cambiar el contenido de mi carpeta de archivos temporales con cualquier revisión. Con la interfaz de línea de comandos, pude hacer esto con git checkout master
y git checkout dylanbranch
(donde dylanbranch es una rama que hice en mi propio clon con una revisión arbitrariamente elegida), pero mi código Java que intenta hacer lo mismo falla:
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
y las excepciones imprimen en la consola:
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
puedo comprobar que los archivos en cuestión están marcados como borrada y no organizadas a comprometerse mediante el uso de git status
aunque no estoy seguro de por qué estos cambios son allí, y vuelven cada vez que cambio a la rama principal. A pesar de eso, todavía puedo cambiar con éxito el árbol de trabajo con la línea de comando Git.
Así que mi pregunta: ¿Por qué no trabajo JGit para esta aplicación cuando la línea de comandos Git? Cualquier otra información útil se appreciated- educarme :)
actualización He estado probando con el repositorio de jQuery, y he notado un poco más de problemas con JGit: Cuando estoy trabajando con la rama "master", git status
me dice que soy #On branch master
y que hay nothing to commit (working directory clean)
, pero usando el comando de estado de JGit veo que test/qunit
y src/sizzle
están marcados como Missing
. El reinicio de JGit parece no hacer nada.
Gracias por los enlaces, +1 Para cualquier otra persona que intente hacer lo mismo, mi plan actual de ataque es cometer los "cambios" que JGit ve solo para poder verificar otras cosas. (Esencialmente ignorar los submódulos, al igual que JGit) – Dylan
Puede probar la versión de JGit [aquí] (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) y vea si obtiene las mismas excepciones de conflicto? –
Esa versión más reciente soluciona mi problema (aunque ahora el comando clonar se rompe cuando intentas anular/actualizar tu copia existente). – Dylan