En guide til JGit

1. Introduktion

JGit er en letvægts, ren Java-biblioteksimplementering af Git-versionskontrolsystemet - inklusive arkiveradgangsrutiner, netværksprotokoller og kerneversionskontrolalgoritmer.

JGit er en relativt komplet implementering af Git skrevet i Java og bruges i vid udstrækning i Java-samfundet. JGit-projektet er under Eclipse-paraplyen, og dets hjem kan findes på JGit.

I denne vejledning forklarer vi, hvordan du arbejder med det.

2. Kom godt i gang

Der er en række måder at forbinde dit projekt med JGit og begynde at skrive kode. Den nemmeste måde er sandsynligvis at bruge Maven - integrationen opnås ved at tilføje følgende uddrag til tag i vores pom.xml fil:

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

Besøg Maven Central-arkivet for den nyeste version af JGit. Når dette trin er gjort, vil Maven automatisk erhverve og bruge de JGit-biblioteker, som vi har brug for.

Hvis du foretrækker OSGi-bundter, er der også et p2-lager. Besøg Eclipse JGit for at få de nødvendige oplysninger om, hvordan du integrerer dette bibliotek.

3. Oprettelse af et arkiv

JGit har to grundlæggende niveauer af API: VVS og porcelæn. Terminologien for disse kommer fra Git selv. JGit er opdelt i de samme områder:

  • porcelæn API'er - front-end til almindelige handlinger på brugerniveau (ligner Git kommandolinjeværktøj)
  • VVS API'er - direkte interaktion med lagerniveau-lagerobjekter

Udgangspunktet for de fleste JGit-sessioner er i Datalager klasse. Den første ting, vi skal gøre, er oprettelsen af ​​et nyt Datalager eksempel.

Det i det kommando vil lade os oprette et tomt lager:

Git git = Git.init (). SetDirectory ("/ sti / til / repo"). Kald ();

Dette opretter et lager med et arbejdskatalog på det sted, der er givet til setDirectory ().

Et eksisterende lager kan klones med cloneRepository kommando:

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

Koden ovenfor kloner JGit-arkivet i den navngivne lokale mappe sti / til / repo.

4. Git objekter

Alle objekter er repræsenteret af et SHA-1-id i Git-objektmodellen. I JGit er dette repræsenteret af AnyObjectId og ObjectId klasser.

Der er fire typer objekter i Git-objektmodellen:

  • klat - bruges til lagring af fildata
  • træ - et bibliotek det refererer til andet træer og klatter
  • begå - peger på et enkelt træ
  • tag - markerer en forpligtelse som særlig bruges generelt til mærkning af specifikke udgivelser

For at løse et objekt fra et arkiv skal du blot sende den rigtige revision som i følgende funktion:

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

4.1. Ref

Det Ref er en variabel, der indeholder en enkelt objektidentifikator. Objektidentifikatoren kan være et hvilket som helst gyldigt Git-objekt (klat, træ, begå, tag).

For eksempel for at forespørge om henvisningen til hovedet kan du blot ringe:

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

4.2. RevWalk

Det RevWalk går en begivenhedsgraf og producerer de matchende forpligtelser i rækkefølge:

RevWalk walk = nyt RevWalk (lager);

4.3. RevCommit

Det RevCommit repræsenterer en forpligtelse i Git-objektmodellen. Brug en til at analysere en forpligtelse RevWalk eksempel:

RevWalk walk = nyt RevWalk (lager); RevCommit commit = walk.parseCommit (objectIdOfCommit);

4.4. RevTag

Det RevTag repræsenterer et mærke i Git-objektmodellen. Du kan bruge en RevWalk instans for at analysere et tag:

RevWalk walk = nyt RevWalk (lager); RevTag tag = walk.parseTag (objectIdOfTag);

4.5. RevTree

Det RevTree repræsenterer et træ i Git-objektmodellen. EN RevWalk instans bruges også til at analysere et træ:

RevWalk walk = nyt RevWalk (lager); RevTree tree = walk.parseTree (objectIdOfTree);

5. Porcelæn API

Mens JGit indeholder en masse kode på lavt niveau til at arbejde med Git-arkiver, indeholder den også et API på højere niveau, der efterligner noget af Git porcelæn kommandoer i org.eclipse.jgit.api pakke.

5.1. Tilføj kommando (git-add)

Det Tilføj kommando giver dig mulighed for at tilføje filer til indekset via:

  • addFilepattern()

Her er et hurtigt eksempel på, hvordan du tilføjer et sæt filer til indekset ved hjælp af porcelæn API:

Git git = ny Git (db); AddCommand add = git.add (); add.addFilepattern ("someDirectory"). kald ();

5.2. CommitCommand (git-begå)

Det CommitCommand giver dig mulighed for at udføre forpligtelser og har følgende muligheder tilgængelige:

  • sæt forfatter()
  • setCommitter()
  • sætAlle()

Her er et hurtigt eksempel på, hvordan man forpligter sig til at bruge porcelæn API:

Git git = ny Git (db); CommitCommand commit = git.commit (); commit.setMessage ("initial commit"). kald ();

5.3. TagCommand (git-tag)

Det TagCommand understøtter en række taggingmuligheder:

  • sætnavn()
  • setMessage()
  • setTagger()
  • setObjectId()
  • setForceUpdate()
  • setSigned()

Her er et hurtigt eksempel på tagging af en forpligtelse ved hjælp af porcelæn API:

Git git = ny Git (db); RevCommit commit = git.commit (). SetMessage ("initial commit"). Call (); RevTag tag = git.tag (). SetName ("tag"). Call ();

5.4. Logkommando (git-log)

Det Logkommando giver dig mulighed for nemt at gå en begivenhedsgraf.

  • tilføj (AnyObjectId start)
  • addRange (AnyObjectId siden, AnyObjectId indtil)

Her er et hurtigt eksempel på, hvordan du får nogle logbeskeder:

Git git = ny Git (db); Iterabel log = git.log (). Kald ();

6. Ant Opgaver

JGit har også nogle almindelige Ant-opgaver indeholdt i org.eclipse.jgit.ant bundt.

Sådan bruges disse opgaver:

Dette ville give den git-klon, git-init og git-checkout opgaver.

6.1. git-klon

Følgende attributter kræves:

  • uri: URI at klone fra

Følgende attributter er valgfri:

  • dest: destinationen, der skal klones til (bruger som standard et menneskeligt læsbart katalognavn baseret på den sidste stykomponent i URI)
  • bar: rigtigt/falsk/Ja/ingen for at angive, om det klonede lager skal være blottet eller ej (standard er falsk)
  • afdeling: den oprindelige filial, der skal tjekkes ud ved kloning af lageret (er som standard HOVED)

6.2. git-init

Ingen attributter kræves for at køre git-init opgave.

Følgende attributter er valgfri:

  • dest: stien hvor et git-arkiv initialiseres (er som standard $ GIT_DIR eller det aktuelle bibliotek)
  • bar: rigtigt/falsk/Ja/ingen for at angive, om lageret skal være blottet eller ej (standardværdien er falsk)

6.3. git-checkout

Følgende attributter kræves:

  • src: stien til git-arkivet
  • afdeling: den oprindelige filial til kassen

Følgende attributter er valgfri:

  • skabe gren: rigtigt/falsk/Ja/ingen for at angive, om grenen skal oprettes, hvis den ikke allerede findes (som standard falsk)
  • kraft: rigtigt/falsk/Ja/ingen: hvis rigtigt/Ja og filialen med det givne navn allerede eksisterer, vil startpunktet for en eksisterende gren blive indstillet til et nyt startpunkt; hvis falsk, vil den eksisterende filial ikke blive ændret (er som standard falsk)

7. Konklusion

JGit API på højt niveau er ikke svært at forstå. Hvis du ved, hvilken git-kommando du skal bruge, kan du nemt gætte hvilke klasser og metoder der skal bruges i JGit.

Der er en samling klar til at køre JGit-kodestykker her.

Hvis du stadig har problemer eller spørgsmål, bedes du efterlade en kommentar her eller bede JGit-samfundet om hjælp.


$config[zx-auto] not found$config[zx-overlay] not found