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.