-
1. Kom igång
- 1.1 Om versionshantering
- 1.2 En kort historik av Git
- 1.3 Vad är Git?
- 1.4 Kommandoraden
- 1.5 Installera Git
- 1.6 Använda Git för första gången
- 1.7 Få hjälp
- 1.8 Sammanfattning
-
2. Grunder i Git
- 2.1 Skaffa ett Git-förvar
- 2.2 Spara ändringar till förvaret
- 2.3 Visa historiken
- 2.4 Ångra saker
- 2.5 Jobba med fjärrförvar
- 2.6 Taggning
- 2.7 Git alias
- 2.8 Sammanfattning
-
3. Git förgreningar
- 3.1 Grenar i ett nötskal
- 3.2 Grundläggande förgrening och sammanslagning
- 3.3 Hantera grenar
- 3.4 Arbetsflöde med grenar
- 3.5 Fjärrgrenar
- 3.6 Grenflytt
- 3.7 Sammanfattning
-
4. Git på servern
- 4.1 Protokollen
- 4.2 Skaffa Git på en server
- 4.3 Generera din publika SSH-nyckel
- 4.4 Konvigurera servern
- 4.5 Git Daemonen
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Alternativ tillhandahållna av tredje part
- 4.10 Sammanfattning
-
5. Distribuerade Git
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Summary
-
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Summary
-
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
-
10. Git Internals
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Summary
-
A1. Bilaga A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in PowerShell
- A1.7 Summary
-
A2. Bilaga B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Bilaga C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
3.4 Git förgreningar - Arbetsflöde med grenar
Arbetsflöde med grenar
Nu när du kan grunderna i att skapa och slå samman grenar, vad kan eller bör du göra med dem? I detta avsnitt kommer vi att gå igenom några vanliga arbetsflöden som dessa lättviktiga grenar möjliggör så kan du avgöra om du vill inkorporera dem i din egen utvecklingscykel.
Långlivade grenar
Eftersom Git använder en enkel trevägssammanslagning är det generellt mycket enkelt att slå ihop en gren in i en annan flera gånger över en längre period. Detta betyder att du kan ha flera grenar som alltid finns och som du använder för olika steg i utvecklingen. Du kan regelbundet slå samman ändringar från några av dem in i andra.
Många Gitutvecklare har ett arbetsflöde som omfamnar detta tillvägagångssätt, som t.ex. att bara ha helt stabil kod i sin master
-gren — möjligtvis bara kod som har eller skall frisläppas.
De har en annan parallell gren benämnd develop
eller next
som de jobbar från och använder för att testa stabiliteten — den är inte nödvändigtvis alltid stabil, men när när den når ett stabilt tillstånd kan den slås ihop med master
.
Den används för att dra in ämnesgrenar (kortlivade grenar, som din förra iss53
-gren) när de är färdigställda, för att säkerställa att de klarar alla tester och inte introducerar buggar.
I verkligheten pratar vi om pekare som förflyttar sig upp igenom raden av versioner som du skapar. De stabila grenarna är längre ner i din versionshistorik och grenerna som innehåller det absolut nyaste är längre upp.
Det är generellt enklare att tänka på dem som silos, där en uppsättning versioner promoveras till en mer stabil silo då de är fullt testade.
Du kan fortsätta med detta för flera nivåer av stabilitet.
Några större projekt har även en gren benämnd proposed
eller pu
(proposed uppdates, sv. föreslagna uppdateringar) som har integrerat grenar som kan vara färdiga att ingå i grenen next
eller master
.
Iden är att dina genar håller olika nivåer av stabilitet. När de når en mer stabil nivå, slås de samman till grenen ovanför dem.
Återigen, att ha flera långlivade grenar är inte nödvändigt, men det är ofta till hjälp när du har att göra med väldigt stora eller komplexa projekt.
Ämnesgrenar
Ämnesgrenar är användbara i projekt oavsett storlek. En ämnesgren är en kortlivad gren som du skapar och använder för en enskild specifik funktion eller sammanhängande arbete. Detta är något som du troligen aldrig gjort med något versionshanteringssystem innan eftersom det generellt är dyrt att skapa och slå samman grenar. Men i Git är det vanligt att skapa, arbeta på, slå samman och ta bort grenar flera gånger dagligen.
Du såg detta i förra avsnittet med grenarna iss53
och hotfix
som du skapade.
Du gjorde några få versioner på dem och tog bort dem direkt efter att de slagits ihop med din huvudgren.
Denna teknik tillåter att du byter kontext snabbt och fullständigt — eftersom ditt arbete är separerat i silos där alla ändringar i den grenen har att göra med just den specifika funktionen, är det lättare att se vad som har hänt vid exempelvis kodgranskning.
Du kan behålla ändringarna där i minuter, dagar, eller månader, och slå samman dem när de är klara, oaktat ordningen i vilken de skapades eller arbetades på.
Anta exemplet att arbeta lite (på master
), grena ut för att lösa ett problem (iss91
), jobba lite på den och grena ut igen och försöka lösa problemet på ett annat sätt (iss91v2
). Du går sedan tillbaka till master
och jobbar där lite och sedan grenar du ut för att göra lite jobb som du inte är säker på är en bra idé (grenen dumbidea
).
Din versionshistorik kommer se ut något liknande detta:
Anta nu att du vill ha den andra lösningen för problemet (iss91v2
) och att du visat grenen dumbidea
för dina kollegor och det föreföll sig att den var genial.
Du kan då kasta den ordinarie grenen iss91
(och förlora versionerna C5
och C6
) samt slå samman de andra två versionerna.
Din versionshistorik ser då ut såhär:
dumbidea
och iss91v2
Vi kommer gå in i mer detalj gällande olika möjliga arbetsflödena för dit Gitprojekt i Distribuerade Git, innan du bestämmer dig för vilken förgreningsmodell som ditt nästa projekt skall ha, så glöm inte det kapitlet.
Det är viktigt att komma ihåg att när du gör allt detta, att grenarna är lokala. När du grenar ut och slår ihop grenar görs allt i dit lokala förvar — ingen kommunikation sker med servern.