Eine Anleitung zu JGit

Ein Leitfaden für JGit

1. Einführung

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

JGit ist eine relativ vollständige Implementierung von Git, die in Java geschrieben wurde und in der Java-Community weit verbreitet ist. Das JGit-Projekt befindet sich unter dem Dach von Eclipse und seine Heimat befindet sich beiJGit.

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

2. Anfangen

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 zum<dependencies>-Tag in unsererpom.xml-Datei:


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

Bitte besuchen Sie dieMaven Central repository für die neueste Version von JGit. 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 SieEclipse JGit, um die erforderlichen Informationen zur Integration dieser Bibliothek zu erhalten.

3. Repository erstellen

JGit verfügt über zwei grundlegende API-Ebenen:plumbing undporcelain. Die Terminologie hierfür stammt von Git selbst. JGit ist in die gleichen Bereiche unterteilt:

  • porcelain APIs - Front-End für allgemeine Aktionen auf Benutzerebene (ähnlich dem Git-Befehlszeilentool)

  • plumbing APIs - direkte Interaktion mit Repository-Objekten auf niedriger Ebene

Der Ausgangspunkt für die meisten JGit-Sitzungen liegt in der KlasseRepository. Das erste, was wir tun werden, ist die Erstellung einer neuenRepository-Instanz.

Mit dem Befehlinitkö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, dersetDirectory() zugewiesen wurde.

Ein vorhandenes Repository kann mit dem BefehlcloneRepository geklont werden:

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

Der obige Code klont das JGit-Repository in das lokale Verzeichnispath/to/repo.

4. Git-Objekte

Alle Objekte werden im Git-Objektmodell durch eine SHA-1-ID dargestellt. In JGit wird dies durch die KlassenAnyObjectId undObjectId dargestellt.

Es gibt vier Arten von Objekten im Git-Objektmodell:

  • blob - wird zum Speichern von Dateidaten verwendet

  • tree - ein Verzeichnis; es verweist auf anderetrees undblobs

  • commit - 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

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

DieRevWalk durchlaufen ein Commit-Diagramm und erzeugen die passenden Commits in der folgenden Reihenfolge:

RevWalk walk = new RevWalk(repository);

4.3. RevCommit

RevCommit repräsentiert ein Commit im Git-Objektmodell. Verwenden Sie zum Parsen eines Commits die Instanz vonRevWalk:

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

4.4. RevTag

DasRevTag repräsentiert ein Tag im Git-Objektmodell. Sie können eineRevWalk-Instanz verwenden, um ein Tag zu analysieren:

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

4.5. RevTree

DasRevTree repräsentiert einen Baum im Git-Objektmodell. Die Instanz vonRevWalkwird auch zum Parsen eines Baums verwendet:

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

5. Porzellan API

Während JGit viel Code auf niedriger Ebene für die Arbeit mit Git-Repositorys enthält, enthält es auch eine API auf höherer Ebene, die einige der Befehle von Gitporcelainim Paketorg.eclipse.jgit.apinachahmt.

5.1. AddCommand (git-add)

MitAddCommand 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 derporcelain-API:

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

5.2. CommitCommand (git-commit)

MitCommitCommand 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 derporcelain-API:

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

5.3. TagCommand (git-tag)

DasTagCommand 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 derporcelain-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)

MitLogCommand können Sie problemlos ein Commit-Diagramm 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 hat auch einige allgemeine Ant-Aufgaben, die imorg.eclipse.jgit.ant-Bundle enthalten sind.

So verwenden Sie diese Aufgaben:


    
        
        
        
    

Dies würde die Aufgabengit-clone, git-init undgit-checkout bereitstellen.

6.1. git-clone

Folgende Attribute sind erforderlich:

  • uri: Der URI, von dem 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 derURI basiert.)

  • bare:true /false /yes /no, um anzugeben, ob das geklonte Repository leer sein soll oder nicht (standardmäßigfalse)

  • branch: Der erste Zweig, der beim Klonen des Repositorys ausgecheckt werden soll (standardmäßigHEAD).

6.2. git-init

Es sind keine Attribute erforderlich, um die Aufgabegit-initauszuführen.

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 leer sein soll oder nicht (standardmäßigfalse)

6.3. git-checkout

Folgende Attribute sind erforderlich:

  • src: Der Pfad zum Git-Repository

  • branch: 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äßigfalse)

  • force:true /false /yes /no: wenntrue /yes und der Zweig mit dem angegebenen Namen bereits vorhanden ist, wird der Startpunkt eines vorhandenen Zweigs auf einen neuen Startpunkt gesetzt; Wennfalse, wird der vorhandene Zweig nicht geändert (standardmäßigfalse).

7. Fazit

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

Es gibt eine Sammlung von sofort einsatzbereiten JGit-Codefragmentenhere.

Wenn Sie immer noch Schwierigkeiten oder Fragen haben, hinterlassen Sie bitte hier einen Kommentar oder bitten Sie dieJGit communityum Unterstützung.