tl; dr JGits checkout
löst Ausnahmen aus, während die Befehlszeile git checkout
funktioniert
Ich versuche gerade, JGit zu verwenden, um bestimmte Revisionen aus einem Online-Git-Repository in Java (für die Arbeit) auszuprobieren. Mein aktueller Ansatz ist (und ich bin Git sehr neu, kommt von einem SVN-Hintergrund, so dass dies falsch sein kann):
Im Wesentlichen möchte ich in der Lage sein, den Inhalt meines temporären Ordners mit der jeweiligen Version zu tauschen. Mit der Befehlszeilenschnittstelle konnte ich dies mit git checkout master
und git checkout dylanbranch
machen (wobei dylanbranch ein Zweig ist, den ich auf meinem eigenen Klon mit einer willkürlich gewählten Revision erstellt habe), aber mein Java-Code versucht dasselbe zu tun schlägt fehl:
Und die auf die Konsole gedruckten Ausnahmen:
%Vor% Ich kann überprüfen, dass die fraglichen Dateien als gelöscht markiert sind und nicht für das Commit inszeniert werden, indem ich git status
verwende, obwohl ich nicht sicher bin, warum diese Änderungen da sind, und sie kommen jedes Mal zurück, wenn ich zum Masterzweig zurückwechsle . Trotzdem kann ich den Arbeitsbaum mit der Kommandozeile Git erfolgreich ändern.
Also meine Frage: Warum funktioniert JGit nicht für diese Anwendung, wenn die Befehlszeile git? Jede andere hilfreiche Information wird geschätzt - erziehen Sie mich:)
Update Ich habe mit dem jQuery-Repository getestet und ein paar weitere Probleme mit JGit bemerkt: Wenn ich mit dem Zweig "master" arbeite, sagt mir git status
, dass ich m #On branch master
und dass es nothing to commit (working directory clean)
gibt, aber mit JGits Statusbefehl sehe ich, dass test/qunit
und src/sizzle
als Missing
markiert sind. JGits Reset scheint nichts zu tun.
Die beiden im Stack-Trace genannten Verzeichnisse sind Git Submodule ( test/qunit
und src/sizzle
) welche ist wahrscheinlich die Ursache des Problems, da JGit noch keine volle Untermodulunterstützung hat.
Dies könnte in der Version 1.1 JGit, die diesen Monat veröffentlicht wird, anders funktionieren, basierend auf diesem Commit .
>Sie können mehr über den aktuellen Status der JGit-Submodulunterstützung hier erfahren.
>Ich weiß, dass dies Ihre Frage nicht direkt beantwortet, aber ich hatte auch Probleme mit den Java-Implementierungen von Git. Am besten funktionierte es für mich, die Java-Implementierungen einfach abzulegen und in der Anwendung Befehlszeilenaufrufe an git auszuführen. Es ist vielleicht nicht ideal, aber es wird genau das tun, was Sie wollen, da Sie den Befehl vollständig steuern.
Einfach anrufen
Runtime.getRuntime().exec(...)
Ich hatte ein ähnliches Problem mit Google Checkout. Ich denke, dass die Tatsache, dass Sie in Git eine Verzweigung mit nicht-staged Inhalten wechseln können, eigentlich eine Toleranz ist, keine Eigenschaft. JGit ist global nicht so tolerant wie Git, also sollten Sie normalerweise viele Fälle testen.
Es scheint, dass es nicht direkt Ihr Problem ist (was mit den Submodulen zusammenhängt), aber für allgemeinere Fälle würden Sie Ihre Änderungen vor dem Auschecken bestätigen wollen, um zu einem anderen Zweig zu wechseln.
Beachten Sie, dass der CheckoutCommand für mich perfekt funktioniert, um einen neuen Zweig von einer alten Revision zu starten (Sie müssen den Namen der Verzweigung und die Startrevision festlegen).