Een gids voor JGit

1. Inleiding

JGit is een lichtgewicht, pure Java-bibliotheekimplementatie van het Git-versiebeheersysteem - inclusief toegangsroutines voor opslagplaatsen, netwerkprotocollen en kernalgoritmen voor versiebeheer.

JGit is een relatief complete implementatie van Git geschreven in Java en wordt veel gebruikt in de Java-gemeenschap. Het JGit-project valt onder de Eclipse-paraplu en het huis is te vinden op JGit.

In deze tutorial leggen we uit hoe je ermee kunt werken.

2. Aan de slag

Er zijn een aantal manieren om uw project met JGit te verbinden en te beginnen met het schrijven van code. Waarschijnlijk is de gemakkelijkste manier om Maven te gebruiken - de integratie wordt bereikt door het volgende fragment toe te voegen aan het tag in onze pom.xml het dossier:

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

Bezoek de Maven Central-repository voor de nieuwste versie van JGit. Zodra deze stap is voltooid, zal Maven automatisch de JGit-bibliotheken verwerven en gebruiken die we nodig hebben.

Als u de voorkeur geeft aan OSGi-bundels, is er ook een p2-repository. Bezoek Eclipse JGit voor de nodige informatie over hoe u deze bibliotheek kunt integreren.

3. Creëren van een repository

JGit heeft twee basis API-niveaus: loodgieter en porselein. De terminologie hiervoor komt van Git zelf. JGit is onderverdeeld in dezelfde gebieden:

  • porselein API's - front-end voor algemene acties op gebruikersniveau (vergelijkbaar met Git-opdrachtregeltool)
  • loodgieter API's - directe interactie met opslagplaatsobjecten op laag niveau

Het startpunt voor de meeste JGit-sessies is in het Opslagplaats klasse. Het eerste dat we gaan doen, is het creëren van een nieuw Opslagplaats voorbeeld.

De in het commando laat ons een lege repository aanmaken:

Git git = Git.init (). SetDirectory ("/ pad / naar / repo"). Call ();

Hiermee wordt een repository gemaakt met een werkmap op de locatie die is opgegeven setDirectory ().

Een bestaande repository kan worden gekloond met de cloneRepository opdracht:

Git git = Git.cloneRepository () .setURI ("// github.com/eclipse/jgit.git") .setDirectory ("/ pad / naar / opslagplaats") .call ();

De bovenstaande code zal de JGit-repository klonen naar de lokale map met de naam pad / naar / repo.

4. Git-objecten

Alle objecten worden vertegenwoordigd door een SHA-1-id in het Git-objectmodel. In JGit wordt dit vertegenwoordigd door de AnyObjectId en ObjectId klassen.

Er zijn vier soorten objecten in het Git-objectmodel:

  • blob - gebruikt voor het opslaan van bestandsgegevens
  • boom - een directory; het verwijst naar andere bomen en blobs
  • plegen - wijst naar een enkele boom
  • label - markeert een commit als speciaal; over het algemeen gebruikt voor het markeren van specifieke releases

Om een ​​object uit een repository op te lossen, geeft u gewoon de juiste revisie door zoals in de volgende functie:

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

4.1. Ref

De Ref is een variabele die één object-ID bevat. De object-ID kan elk geldig Git-object zijn (blob, boom, plegen, label).

Om bijvoorbeeld de verwijzing naar head op te vragen, kunt u eenvoudig bellen:

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

4.2. RevWalk

De RevWalk loopt een commit-grafiek en produceert de overeenkomende commits in de volgende volgorde:

RevWalk walk = nieuwe RevWalk (repository);

4.3. RevCommit

De RevCommit vertegenwoordigt een commit in het Git-objectmodel. Gebruik een RevWalk voorbeeld:

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

4.4. RevTag

De RevTag vertegenwoordigt een tag in het Git-objectmodel. U kunt een RevWalk instantie om een ​​tag te ontleden:

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

4.5. RevTree

De RevTree vertegenwoordigt een boom in het Git-objectmodel. EEN RevWalk instantie wordt ook gebruikt om een ​​boom te ontleden:

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

5. Porselein API

Hoewel JGit veel low-level code bevat om met Git repositories te werken, bevat het ook een hoger level API die een deel van de Git nabootst porselein opdrachten in de org.eclipse.jgit.api pakket.

5.1. AddCommand (git-add)

De AddCommand stelt u in staat om bestanden aan de index toe te voegen via:

  • addFilepattern()

Hier is een snel voorbeeld van hoe u een set bestanden aan de index kunt toevoegen met de porselein API:

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

5.2. CommitCommand (git-commit)

De CommitCommand stelt je in staat om commits uit te voeren en heeft de volgende opties beschikbaar:

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

Hier is een snel voorbeeld van hoe je commit met behulp van de porselein API:

Git git = nieuwe Git (db); CommitCommand commit = git.commit (); commit.setMessage ("initiële vastlegging"). call ();

5.3. TagCommand (git-tag)

De TagCommand ondersteunt een groot aantal tagging-opties:

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

Hier is een snel voorbeeld van het taggen van een commit met de porselein API:

Git git = nieuwe Git (db); RevCommit commit = git.commit (). SetMessage ("initiële commit"). Call (); RevTag-tag = git.tag (). SetName ("tag"). Call ();

5.4. LogCommand (git-log)

De LogCommand stelt je in staat om gemakkelijk een commit-grafiek te lopen.

  • add (AnyObjectId start)
  • addRange (AnyObjectId sinds, AnyObjectId tot)

Hier is een snel voorbeeld van hoe u enkele logboekberichten kunt krijgen:

Git git = nieuwe Git (db); Herhaalbare log = git.log (). Call ();

6. Ant-taken

JGit heeft ook enkele algemene Ant-taken in het org.eclipse.jgit.ant bundel.

Om die taken te gebruiken:

Dit zou de git-clone, git-init en git-checkout taken.

6.1. git-kloon

De volgende attributen zijn vereist:

  • uri: de URI om van te klonen

De volgende attributen zijn optioneel:

  • dest: de bestemming om naar te klonen (wordt standaard een door mensen leesbare mapnaam gebruikt op basis van het laatste padcomponent van het URI)
  • kaal: waar/false/Ja/Nee om aan te geven of de gekloonde repository kaal moet zijn of niet (standaard false)
  • Afdeling: de eerste branch om uit te checken bij het klonen van de repository (standaard ingesteld op HOOFD)

6.2. git-init

Er zijn geen attributen vereist om het git-init taak.

De volgende attributen zijn optioneel:

  • dest: het pad waar een git-repository is geïnitialiseerd (standaard $ GIT_DIR of de huidige directory)
  • kaal: waar/false/Ja/Nee om aan te geven of de repository kaal moet zijn of niet (standaard false)

6.3. git-checkout

De volgende attributen zijn vereist:

  • src: het pad naar de git-repository
  • Afdeling: de eerste tak om af te rekenen

De volgende attributen zijn optioneel:

  • createbranch: waar/false/Ja/Nee om aan te geven of de branch moet worden gemaakt als deze nog niet bestaat (standaard false)
  • dwingen: waar/false/Ja/Nee: als waar/Ja en de branch met de opgegeven naam al bestaat, wordt het startpunt van een bestaande branch op een nieuw startpunt gezet; als false, de bestaande branch zal niet worden gewijzigd (standaard ingesteld op false)

7. Conclusie

De JGit API op hoog niveau is niet moeilijk te begrijpen. Als je weet welk git-commando je moet gebruiken, kun je gemakkelijk raden welke klassen en methoden je in JGit moet gebruiken.

Er is hier een verzameling kant-en-klare JGit-codefragmenten beschikbaar.

Als je nog steeds problemen of vragen hebt, laat dan hier een opmerking achter of vraag de JGit-gemeenschap om hulp.