Ein Leitfaden für JGit

1. Einleitung

JGit ist eine leichte, reine Java-Bibliotheksimplementierung des Git-Versionskontrollsystems - einschließlich Repository-Zugriffsroutinen, Netzwerkprotokollen und zentralen Versionskontrollalgorithmen.

JGit ist eine relativ voll funktionsfähige Implementierung von Git, die in Java geschrieben wurde und in der Java-Community weit verbreitet ist. Das JGit-Projekt steht unter dem Dach von Eclipse und seine Heimat befindet sich bei JGit.

In diesem Tutorial erklären wir Ihnen, wie Sie damit arbeiten.

2. Erste Schritte

Es gibt verschiedene Möglichkeiten, Ihr Projekt mit JGit zu verbinden und Code zu schreiben. Der wahrscheinlich einfachste Weg ist die Verwendung von Maven. Die Integration erfolgt durch Hinzufügen des folgenden Snippets zumTag in unserer pom.xml Datei:

 org.eclipse.jgit org.eclipse.jgit 4.6.0.201612231935-r 

Die neueste Version von JGit finden Sie im Maven Central-Repository. Sobald dieser Schritt abgeschlossen ist, erfasst und verwendet Maven automatisch die benötigten JGit-Bibliotheken.

Wenn Sie OSGi-Bundles bevorzugen, gibt es auch ein p2-Repository. Bitte besuchen Sie Eclipse JGit, um die erforderlichen Informationen zur Integration dieser Bibliothek zu erhalten.

3. Erstellen eines Repositorys

JGit verfügt über zwei grundlegende API-Ebenen: Sanitär und Porzellan . Die Terminologie für diese stammt von Git selbst. JGit ist in die gleichen Bereiche unterteilt:

  • Porzellan- APIs - Front-End für allgemeine Aktionen auf Benutzerebene (ähnlich dem Git-Befehlszeilentool)
  • Installations- APIs - direkte Interaktion mit Repository-Objekten auf niedriger Ebene

Der Ausgangspunkt für die meisten JGit-Sitzungen liegt in der Repository- Klasse. Als erstes erstellen wir eine neue Repository- Instanz.

Mit dem Befehl init können wir ein leeres Repository erstellen:

Git git = Git.init().setDirectory("/path/to/repo").call();

Dadurch wird ein Repository mit einem Arbeitsverzeichnis an dem Speicherort erstellt, der setDirectory () zugewiesen wurde .

Ein vorhandenes Repository kann mit dem Befehl cloneRepository geklont werden :

Git git = Git.cloneRepository() .setURI("//github.com/eclipse/jgit.git") .setDirectory("/path/to/repo") .call();

Der obige Code klont das JGit-Repository in das lokale Verzeichnis mit dem Namen path / to / repo .

4. Git-Objekte

Alle Objekte werden im Git-Objektmodell durch eine SHA-1-ID dargestellt. In JGit wird dies durch die Klassen AnyObjectId und ObjectId dargestellt .

Es gibt vier Arten von Objekten im Git-Objektmodell:

  • Blob - wird zum Speichern von Dateidaten verwendet
  • Baum - ein Verzeichnis; Es verweist auf andere Bäume und Kleckse
  • Festschreiben - zeigt auf einen einzelnen Baum
  • tag - markiert ein Commit als speziell; Wird im Allgemeinen zum Markieren bestimmter Releases verwendet

Um ein Objekt aus einem Repository aufzulösen, übergeben Sie einfach die richtige Revision wie in der folgenden Funktion:

ObjectId head = repository.resolve("HEAD");

4.1. Ref

Der Ref ist eine Variable, die eine einzelne Objektkennung enthält. Die Objektkennung kann ein beliebiges gültiges Git-Objekt sein ( Blob , Tree , Commit , Tag ).

Um beispielsweise den Verweis auf head abzufragen, können Sie einfach Folgendes aufrufen:

Ref HEAD = repository.getRef("refs/heads/master");

4.2. RevWalk

Der RevWalk führt ein Commit-Diagramm durch und erstellt die passenden Commits in der folgenden Reihenfolge:

RevWalk walk = new RevWalk(repository);

4.3. RevCommit

Das RevCommit repräsentiert ein Commit im Git-Objektmodell. Verwenden Sie eine RevWalk- Instanz , um ein Commit zu analysieren :

RevWalk walk = new RevWalk(repository); RevCommit commit = walk.parseCommit(objectIdOfCommit);

4.4. RevTag

Das RevTag repräsentiert ein Tag im Git-Objektmodell. Sie können eine RevWalk- Instanz verwenden, um ein Tag zu analysieren:

RevWalk walk = new RevWalk(repository); RevTag tag = walk.parseTag(objectIdOfTag);

4.5. RevTree

Der RevTree repräsentiert einen Baum im Git-Objektmodell. Eine RevWalk- Instanz wird auch zum Parsen eines Baums verwendet:

RevWalk walk = new RevWalk(repository); RevTree tree = walk.parseTree(objectIdOfTree);

5. Porzellan-API

Während JGit viel Low-Level-Code für die Arbeit mit Git-Repositorys enthält, enthält es auch eine übergeordnete API, die einige der Git- Porzellanbefehle im Paket org.eclipse.jgit.api nachahmt .

5.1. AddCommand ( git-add )

Mit dem AddCommand können Sie Dateien zum Index hinzufügen über:

  • addFilepattern ()

Hier ist ein kurzes Beispiel für das Hinzufügen einer Reihe von Dateien zum Index mithilfe der Porzellan- API:

Git git = new Git(db); AddCommand add = git.add(); add.addFilepattern("someDirectory").call();

5.2. CommitCommand ( git-commit )

Mit dem CommitCommand können Sie Commits ausführen und haben folgende Optionen zur Verfügung:

  • setAuthor ()
  • setCommitter ()
  • setAll ()

Hier ist ein kurzes Beispiel für das Festschreiben mithilfe der Porzellan- API:

Git git = new Git(db); CommitCommand commit = git.commit(); commit.setMessage("initial commit").call();

5.3. TagCommand ( Git-Tag )

Der TagCommand unterstützt eine Vielzahl von Tagging-Optionen:

  • setName ()
  • setMessage ()
  • setTagger ()
  • setObjectId ()
  • setForceUpdate ()
  • setSigned ()

Hier ist ein kurzes Beispiel für das Markieren eines Commits mithilfe der Porzellan- API:

Git git = new Git(db); RevCommit commit = git.commit().setMessage("initial commit").call(); RevTag tag = git.tag().setName("tag").call();

5.4. LogCommand ( Git-Log )

Mit dem LogCommand können Sie ein Commit-Diagramm einfach durchlaufen .

  • add (AnyObjectId start)
  • addRange (AnyObjectId seit, AnyObjectId bis)

Hier ist ein kurzes Beispiel, wie Sie einige Protokollnachrichten erhalten:

Git git = new Git(db); Iterable log = git.log().call();

6. Ameisenaufgaben

JGit enthält auch einige allgemeine Ant-Tasks, die im Paket org.eclipse.jgit.ant enthalten sind .

So verwenden Sie diese Aufgaben:

Dies würde die Aufgaben git-clone, git-init und git-checkout bereitstellen .

6.1. Git-Klon

Folgende Attribute sind erforderlich:

  • uri : die URI, von der geklont werden soll

Die folgenden Attribute sind optional:

  • dest : Das Ziel, an das geklont werden soll (standardmäßig wird ein lesbarer Verzeichnisname verwendet, der auf der letzten Pfadkomponente des URI basiert ).
  • bare : true / false / yes / no, um anzugeben, ob das geklonte Repository blank sein soll oder nicht (standardmäßig false )
  • Zweig : Der erste Zweig, der beim Klonen des Repositorys ausgecheckt werden soll (standardmäßig HEAD ).

6.2. Git-Init

Zum Ausführen der git-init- Task sind keine Attribute erforderlich .

Die folgenden Attribute sind optional:

  • dest : Der Pfad, in dem ein Git-Repository initialisiert wird (standardmäßig $ GIT_DIR oder das aktuelle Verzeichnis).
  • bare : true / false / yes / no, um anzugeben, ob das Repository nackt sein soll oder nicht (standardmäßig false )

6.3. Git-Checkout

Folgende Attribute sind erforderlich:

  • src : Der Pfad zum Git-Repository
  • Zweig : Der erste Zweig zum Auschecken

Die folgenden Attribute sind optional:

  • createbranch : true / false / yes / no, um anzugeben, ob der Zweig erstellt werden soll, wenn er noch nicht vorhanden ist (standardmäßig false ).
  • force : true / false / yes / no : Wenn true / yes und der Zweig mit dem angegebenen Namen bereits vorhanden ist, wird der Startpunkt eines vorhandenen Zweigs auf einen neuen Startpunkt gesetzt. Wenn false , wird der vorhandene Zweig nicht geändert (standardmäßig false ).

7. Fazit

Die übergeordnete JGit-API ist nicht schwer zu verstehen. Wenn Sie wissen, welchen git-Befehl Sie verwenden sollen, können Sie leicht erraten, welche Klassen und Methoden in JGit verwendet werden sollen.

Hier finden Sie eine Sammlung von sofort einsatzbereiten JGit-Codefragmenten.

Wenn Sie immer noch Schwierigkeiten oder Fragen haben, hinterlassen Sie bitte hier einen Kommentar oder bitten Sie die JGit-Community um Unterstützung.