-
1. Aan de slag
- 1.1 Over versiebeheer
- 1.2 Een kort historisch overzicht van Git
- 1.3 Wat is Git?
- 1.4 De commando-regel
- 1.5 Git installeren
- 1.6 Git klaarmaken voor eerste gebruik
- 1.7 Hulp krijgen
- 1.8 Samenvatting
-
2. Git Basics
-
3. Branchen in Git
- 3.1 Branches in vogelvlucht
- 3.2 Eenvoudig branchen en mergen
- 3.3 Branch-beheer
- 3.4 Branch workflows
- 3.5 Branches op afstand (Remote branches)
- 3.6 Rebasen
- 3.7 Samenvatting
-
4. Git op de server
- 4.1 De protocollen
- 4.2 Git op een server krijgen
- 4.3 Je publieke SSH sleutel genereren
- 4.4 De server opzetten
- 4.5 Git Daemon
- 4.6 Slimme HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Hosting oplossingen van derden
- 4.10 Samenvatting
-
5. Gedistribueerd Git
-
6. GitHub
-
7. Git Tools
- 7.1 Revisie Selectie
- 7.2 Interactief stagen
- 7.3 Stashen en opschonen
- 7.4 Je werk tekenen
- 7.5 Zoeken
- 7.6 Geschiedenis herschrijven
- 7.7 Reset ontrafeld
- 7.8 Mergen voor gevorderden
- 7.9 Rerere
- 7.10 Debuggen met Git
- 7.11 Submodules
- 7.12 Bundelen
- 7.13 Vervangen
- 7.14 Het opslaan van inloggegevens
- 7.15 Samenvatting
-
8. Git aanpassen
- 8.1 Git configuratie
- 8.2 Git attributen
- 8.3 Git Hooks
- 8.4 Een voorbeeld van Git-afgedwongen beleid
- 8.5 Samenvatting
-
9. Git en andere systemen
- 9.1 Git als een client
- 9.2 Migreren naar Git
- 9.3 Samenvatting
-
10. Git Binnenwerk
- 10.1 Binnenwerk en koetswerk (plumbing and porcelain)
- 10.2 Git objecten
- 10.3 Git Referenties
- 10.4 Packfiles
- 10.5 De Refspec
- 10.6 Uitwisseling protocollen
- 10.7 Onderhoud en gegevensherstel
- 10.8 Omgevingsvariabelen
- 10.9 Samenvatting
-
A1. Bijlage A: Git in andere omgevingen
- A1.1 Grafische interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Visual Studio Code
- A1.4 Git in Eclipse
- A1.5 Git in Sublime Text
- A1.6 Git in Bash
- A1.7 Git in Zsh
- A1.8 Git in PowerShell
- A1.9 Samenvatting
-
A2. Bijlage B: Git in je applicaties inbouwen
- A2.1 Commando-regel Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Bijlage C: Git Commando’s
- A3.1 Setup en configuratie
- A3.2 Projecten ophalen en maken
- A3.3 Basic Snapshotten
- A3.4 Branchen en mergen
- A3.5 Projecten delen en bijwerken
- A3.6 Inspectie en vergelijking
- A3.7 Debuggen
- A3.8 Patchen
- A3.9 Email
- A3.10 Externe systemen
- A3.11 Beheer
- A3.12 Binnenwerk commando’s (plumbing commando’s)
A2.4 Bijlage B: Git in je applicaties inbouwen - go-git
go-git
In het geval dat je Git in een service die in Golang is geschreven wilt integreren, is er ook een zuivere Go library implementatie. Deze implementatie heeft geen enkele afhankelijkheden met het onderliggende systeem en is dus niet onderheving aan handmatige geheugenbeheer fouten. Het is ook nog eens transparant voor de standaard Golang prestatie-analyse gereedschappen zoals CPU, Geheugen profilers, race detectors, etc.
go-git is gefocust op uitbreidbaarheid, compatibiliteit en ondersteund de meeste plumbing APIs, wat is beschreven op https://github.com/src-d/go-git/blob/master/COMPATIBILITY.md.
Hier is een eenvoudig voorbeeld van het gebruik van Go APIs:
import "gopkg.in/src-d/go-git.v4"
r, err := git.PlainClone("/tmp/foo", false, &git.CloneOptions{
URL: "https://github.com/src-d/go-git",
Progress: os.Stdout,
})
Op het moment dat je een Repository
instantie hebt, kan je de informatie verkrijgen en wijzigingen erop uitvoeren:
// retrieves the branch pointed by HEAD
ref, err := r.Head()
// get the commit object, pointed by ref
commit, err := r.CommitObject(ref.Hash())
// retrieves the commit history
history, err := commit.History()
// iterates over the commits and print each
for _, c := range history {
fmt.Println(c)
}
Gevorderde functionaliteit
go-git heeft een aantal opmerkelijke mogelijkheden, een ervan is een uitbreidbaar opslag systeem, die vergelijkbaar is met Libgit2 backends. De standaard implementatie is in-memory opslag, wat heel snel is.
r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{
URL: "https://github.com/src-d/go-git",
})
Uitbreidbare opslag biedt veel interessante opties. Bijvoorbeeld, https://github.com/src-d/go-git/tree/master/_examples/storage geeft je d emogelijkheid om referenties, objecten en configuratie in een Aerospike database op te slaan.
Een andere mogelijkheid is een abstractie van een flexibel bestandssysteem. Met https://godoc.org/github.com/src-d/go-billy#Filesystem is het eenvoudig om alle bestanden op een andere manier op te slaan, bijv. door ze allemaal in een enkele archief op te slaan of door ze allemaal in het geheugen te houden.
Een andere geavanceerd gebruiksscenario is een erg optimaliseerbare HTTP client, zoals een die gevonden kan worden op https://github.com/src-d/go-git/blob/master/_examples/custom_http/main.go.
customClient := &http.Client{
Transport: &http.Transport{ // accept any certificate (might be useful for testing)
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
},
Timeout: 15 * time.Second, // 15 second timeout
CheckRedirect: func(req *http.Request, via []*http.Request) error {
return http.ErrUseLastResponse // don't follow redirect
},
}
// Override http(s) default protocol to use our custom client
client.InstallProtocol("https", githttp.NewClient(customClient))
// Clone repository using the new client if the protocol is https://
r, err := git.Clone(memory.NewStorage(), nil, &git.CloneOptions{URL: url})
Meer lezen
Een volledige behandeling van de mogelijkheden van go-git ligt buiten het bestek van dit boek. Als je meer informatie wilt hebben over go-git, dan is API documentatie beschikbaar op https://godoc.org/gopkg.in/src-d/go-git.v4, en een aantal gebruiksvoorbeelden op https://github.com/src-d/go-git/tree/master/_examples.