En guide til JGit
1. Introduksjon
JGit er en lett, ren Java-biblioteksimplementering av Git versjonskontrollsystemet - inkludert rutiner for tilgang til depot, nettverksprotokoller og kjerneversjonskontrollalgoritmer.
JGit er en relativt fullverdig implementering av Git skrevet i Java og er mye brukt i Java-samfunnet. JGit-prosjektet er under formørkelsesparaplyen, og dets hjem finner du på JGit.
I denne opplæringen forklarer vi hvordan du kan jobbe med den.
2. Komme i gang
Det er flere måter å koble prosjektet til JGit og begynne å skrive kode. Sannsynligvis er den enkleste måten å bruke Maven - integrasjonen oppnås ved å legge til følgende kodebit i tag i vår pom.xml fil:
org.eclipse.jgit org.eclipse.jgit 4.6.0.201612231935-r
Besøk Maven Central repository for den nyeste versjonen av JGit. Når dette trinnet er gjort, vil Maven automatisk anskaffe og bruke JGit-bibliotekene vi trenger.
Hvis du foretrekker OSGi-bunter, er det også et p2-lager. Besøk Eclipse JGit for å få nødvendig informasjon om hvordan du integrerer dette biblioteket.
3. Opprette et depot
JGit har to grunnleggende nivåer av API: rørleggerarbeid og porselen. Terminologien for disse kommer fra Git selv. JGit er delt inn i de samme områdene:
- porselen APIer - front-end for vanlige handlinger på brukernivå (ligner på Git kommandolinjeverktøy)
- rørleggerarbeid APIer - direkte interaksjon med lagringsobjekter på lavt nivå
Utgangspunktet for de fleste JGit-økter er i Oppbevaringssted klasse. Det første vi skal gjøre er å skape et nytt Oppbevaringssted forekomst.
De i det kommando vil la oss opprette et tomt arkiv:
Git git = Git.init (). SetDirectory ("/ path / to / repo"). Call ();
Dette vil opprette et lager med en arbeidskatalog på stedet gitt 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 vil klone JGit-depotet i den lokale katalogen som heter sti / til / repo.
4. Git Objekter
Alle objekter er representert med en SHA-1-id i Git-objektmodellen. I JGit er dette representert av AnyObjectId og ObjectId klasser.
Det er fire typer objekter i Git-objektmodellen:
- klatt - brukes til lagring av fildata
- tre - en katalog; den refererer til annet trær og klatter
- begå - peker på et enkelt tre
- stikkord - markerer en forpliktelse som spesiell; vanligvis brukt til merking av spesifikke utgivelser
For å løse et objekt fra et depot, passerer du bare riktig revisjon som i følgende funksjon:
ObjectId head = repository.resolve ("HEAD");
4.1. Ref
De Ref er en variabel som inneholder en enkelt objektidentifikator. Objektidentifikatoren kan være et hvilket som helst gyldig Git-objekt (klatt, tre, begå, stikkord).
For eksempel, for å søke etter referansen til hodet, kan du bare ringe:
Ref HEAD = repository.getRef ("refs / heads / master");
4.2. RevWalk
De RevWalk går en forpliktelsesgraf og produserer samsvarende forpliktelser i rekkefølge:
RevWalk walk = nye RevWalk (repository);
4.3. RevCommit
De RevCommit representerer en forpliktelse i Git-objektmodellen. For å analysere en forpliktelse, bruk a RevWalk forekomst:
RevWalk walk = nye RevWalk (repository); RevCommit commit = walk.parseCommit (objectIdOfCommit);
4.4. RevTag
De RevTag representerer en tag i Git-objektmodellen. Du kan bruke en RevWalk forekomst for å analysere en tag:
RevWalk walk = ny RevWalk (repository); RevTag tag = walk.parseTag (objectIdOfTag);
4.5. RevTree
De RevTree representerer et tre i Git-objektmodellen. EN RevWalk forekomst brukes også til å analysere et tre:
RevWalk walk = nye RevWalk (repository); RevTree tree = walk.parseTree (objectIdOfTree);
5. Porselen API
Mens JGit inneholder mye kode på lavt nivå for å fungere med Git-arkiver, inneholder den også et API på høyere nivå som etterligner noe av Git porselen kommandoer i org.eclipse.jgit.api pakke.
5.1. Legg til kommando (git-add)
De Legg til kommando lar deg legge til filer i indeksen via:
- addFilepattern()
Her er et raskt eksempel på hvordan du legger til et sett med filer til indeksen ved hjelp av porselen API:
Git git = ny Git (db); AddCommand add = git.add (); add.addFilepattern ("someDirectory"). ring ();
5.2. CommitCommand (git-commit)
De CommitCommand lar deg utføre forpliktelser og har følgende tilgjengelige alternativer:
- sett Forfatter()
- setCommitter()
- settAll()
Her er et raskt eksempel på hvordan du forplikter deg til å bruke porselen API:
Git git = ny Git (db); CommitCommand commit = git.commit (); commit.setMessage ("initial commit"). kall ();
5.3. TagCommand (git-tag)
De TagCommand støtter en rekke taggingalternativer:
- setName()
- setMessage()
- setTagger()
- setObjectId()
- setForceUpdate()
- settSignert()
Her er et raskt eksempel på å merke en forpliktelse ved hjelp av porselen API:
Git git = ny Git (db); RevCommit commit = git.commit (). SetMessage ("initial commit"). Call (); RevTag tag = git.tag (). SetName ("tag"). Call ();
5.4. Loggkommando (git-logg)
De Loggkommando lar deg enkelt gå en forpliktelsesgraf.
- legg til (AnyObjectId start)
- addRange (AnyObjectId siden, AnyObjectId til)
Her er et raskt eksempel på hvordan du får noen loggmeldinger:
Git git = ny Git (db); Iterabel logg = git.log (). Ring ();
6. Myroppgaver
JGit har også noen vanlige Ant-oppgaver som finnes i org.eclipse.jgit.ant bunt.
Slik bruker du disse oppgavene:
Dette vil gi git-klon, git-init og git-checkout oppgaver.
6.1. git-klon
Følgende attributter kreves:
- uri: URI å klone fra
Følgende attributter er valgfrie:
- dest: destinasjonen du skal klone til (bruker standard et lesbart katalognavn basert på den siste banekomponenten i URI)
- naken: ekte/falsk/ja/Nei for å indikere om det klonede depotet skal være blott eller ikke (standard er falsk)
- gren: den første grenen for å sjekke ut når du kloner depotet (er som standard HODE)
6.2. git-init
Ingen attributter kreves for å kjøre git-init oppgave.
Følgende attributter er valgfrie:
- dest: banen der et git-depot initialiseres (er som standard $ GIT_DIR eller den nåværende katalogen)
- naken: ekte/falsk/ja/Nei for å indikere om depotet skal være tomt eller ikke (standard falsk)
6.3. git-checkout
Følgende attributter kreves:
- src: stien til git-depotet
- gren: den første grenen til kassen
Følgende attributter er valgfrie:
- lage gren: ekte/falsk/ja/Nei for å indikere om grenen skal opprettes hvis den ikke allerede eksisterer (standard falsk)
- makt: ekte/falsk/ja/Nei: hvis ekte/ja og grenen med det gitte navnet allerede eksisterer, vil startpunktet til en eksisterende gren settes til et nytt startpunkt; hvis falsk, vil den eksisterende grenen ikke endres (er som standard falsk)
7. Konklusjon
JGit API på høyt nivå er ikke vanskelig å forstå. Hvis du vet hvilken git-kommando du skal bruke, kan du enkelt gjette hvilke klasser og metoder du skal bruke i JGit.
Det er en samling klare JGit-kodebiter tilgjengelig her.
Hvis du fortsatt har problemer eller spørsmål, kan du legge igjen en kommentar her eller be JGit-samfunnet om hjelp.