JGit checkout vs 'git checkout' Probleme

8

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):

  • klonen Sie das Repository an einen temporären Speicherort auf meiner Festplatte
  • finde heraus, welche Revision ich möchte (Ich habe versucht, den SHA-1-Hash sowie den Namen einer Verzweigung zu verwenden)
  • check diese Revision
  • Von dort würde ich die ausgecheckten Dateien als Eingaben für einen späteren Teil des Programms verwenden.
  • prüfe eine andere Revision
  • Verwenden Sie diese Dateien als Eingaben für einen anderen Teil des Programms

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:

%Vor%

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.

    
Dylan 16.09.2011, 15:36
quelle

3 Antworten

2

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.

>     
Kevin Sawicki 20.09.2011, 21:56
quelle
0

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(...)

Link zur Javadoc-Laufzeitklasse

    
Ken Mason 16.09.2011 17:49
quelle
0

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).

    
Vince 17.11.2011 18:16
quelle

Tags und Links