Commit eine Zeichenfolge mit JGit

8

Eine JGit-Anfänger-Frage:

Ich benutze JGit, um eine Datei (BLOB) aus einem Repository zu lesen und deren Inhalt zu manipulieren. Danach möchte ich den neuen Inhalt mit demselben Dateinamen als neues Commit wieder in das Repository schreiben. Aber wie kann ich den neuen Inhalt mit JGit festschreiben?

Mein Pseudocode:

%Vor%

Muss ich newContent in eine Datei schreiben und diese Datei mit dem AddCommand committen und CommitCommand ? Oder kann ich den String "on-the-fly" unter dem gleichen Dateinamen in das Repository schreiben?

Gibt es irgendwo im Web ein Beispiel, wie man mit JGit committen kann?

    
Sonson123 12.04.2012, 16:22
quelle

3 Antworten

6

Ich denke, es gibt keine andere Möglichkeit, irgendwelche Daten zu übertragen, als den CommitCommand zu verwenden (außer Merging oder solche Operationen, die sehr spezifisch sind).

Also, ja, Sie sollten jede Änderung an Ihrer Datei vornehmen und sie dann hinzufügen und committen (mit AddCommand und CommitCommand von der API).

    
Vince 13.04.2012, 13:44
quelle
3

Vielleicht möchten Sie Blobs in Git verwenden. Diese Technik wird verwendet, um den öffentlichen PGP-Schlüssel beim Signieren von Tags zu speichern. Es sieht so aus, als ob der gewünschte Inhalt immer noch in eine Datei eingefügt werden muss, aber es kann eine temporäre Datei sein. Die Datei existiert nicht im Hauptverzeichnis, wenn jemand einen Pull ausführt. Es wird ein Eintrag in den Baum als ein Blob sein.

Ссылка

Der -w sagt ihm, dass er den Eintrag schreiben und den Hash zurückgeben soll.

%Vor%

Aktualisieren

Ich habe diesen Eintrag auf meinem Handy überflogen und war daher weniger auf die Details bedacht, die Sie zur Verfügung gestellt haben. Ja, Sie müssten die Zeichenfolge in eine Datei schreiben, aber nein, Sie sollten sie nicht wie eine normale Datei hinzufügen müssen. Ich würde vermuten, dass JGit die Fähigkeit hat, hash-object zu machen. Es sieht so aus, als ob Sie bereits einen Code haben, um mit einem BLOB-Eintrag umzugehen. Vielleicht gibt es einen Aufruf der höheren Ebene für das Hash-Objekt, in dem Sie nicht direkt mit dem BLOB arbeiten.

Wenn man bedenkt, dass alles in Git auf Hashes des Inhalts beruht, würde ich sagen, dass, selbst wenn Sie einen Weg gefunden hätten, den String direkt zu schreiben, sollten Sie nicht. Sie sollten das Objekt mit dem gleichen Dateinamen erneut senden, so dass Sie einen neuen Hash und einen aktualisierten Eintrag erhalten.

    
Andrew T Finnell 13.04.2012 14:57
quelle
3

Ja, natürlich können Sie tun, was Sie wollen, aber nicht Add / Commit verwenden, da sie Teil der High-Level Porcelein-API , das nur eine Convenience-API ist, die oben der Low-Level-API erstellt wurde. Daher implementieren sie nur die häufigsten Anwendungsfälle.

Was Sie tun müssen, ist die Implementierung von AddCommand und CommitCommand , um zu sehen, wie man die untergeordnete API verwendet, um BLOB-Objekte und dann Baumobjekte zu erstellen und Objekte zu committen.

Ich würde die Empfehlung, dass Sie gründlich lesen Kapitel 9 des Pro Git-Buches , dass zweite Sie verstehen, wie Git auf einer niedrigen Ebene funktioniert.

    
Maks 07.05.2012 05:58
quelle

Tags und Links