Git worktree

Forstil dig at du arbejder på et projekt hvor du har to branches
- development - basis for næste release
- production - reflekterer nuværende produktion
Production indeholder to filer
og development indeholder tre filer, og du har lige tilføjet en fjerde og lavet en commit på den, samt så er du ved at arejde på en femte fil
(git status til reference)
Da du får en "ALARM BUG SMID ALT HVAD DU HAR I HÆNDERNE OG FIKS DET I PRODUKTION!!!!!!"-email ind, da kunden har opdaget en h2 headline i stedet for h1, som jo selvfølgelig er mere vigtig end det du er ved at lave.
Man kunne nu lave en git checkout production
, men du vil ikke lave en
commit på det du sidder og laver, hvilket gør at din ændring bliver
båret med over
Du kunne bruge git stash
, men det gider vi ikke. Du kunne i teorien
også klone koden igen og skifte til produktion, men der er rigtig meget
kode. What to do? git worktree
to the rescue!!
Du kan hente din kode ned fra production=branchen med følgende
=git worktree add ..production origin/production
, hvilket vil
- oprette en ny folder ved navn
production
, og - smide din filer fra branchen her
Du har nu en seperat folder med production
kildekoden til at ligge. I
en deatached HEAD, men det gør ikke noget
Vi kan nu debugge og finde fejlen, og rette den. Jeg fandt fejlen, i =1.txt=og har ændret filen, og reddet kundens dag!! JUBIII.
Alt virker. Jeg kan nu oprette en hotfix branch udfra den deatached HEAD, tilføje filen til mit index, og committe den
Jeg kan til sidst smide den op i min origin
, med
git push --set-upstream origin hotfix/coolfix
. Jeg kan nu smide den på
et miljø, teste det og smide den ind i =production=igen via et pull
request
Jeg kan nu skifte branch til =production=og se at min ændring rigtig nok er kommet med
Her er ændringen
Læg mærke til at jeg hele tiden er i min production
worktree folder. Skifter jeg til
min oprindelige folder, hvor jeg var igang på development
branchen,
har jeg 5 filer, et commit, noget jeg var igang med og ingenting i
1.txt
filen
Det smarte er at jeg nu kan merge production ind i development, da jeg har det hele lokalt
BOOM
Jeg kan nu fræse videre med min udvikling.
Angående oprydning kan jeg slette min lokale production
folder
og køre en git worktree prune
Jeg har nu ikke en linket production
branch mere
production
branchen er ikke længere markeret med + symbolet og den blå farve. Jeg
antager at det er det som fortæller mig at branchen på en eller anden
måde er linket. Man kan bruge git worktree list
til at få vist alle
ens worktrees.
Hvorfor ikke bare klone? Det smarte ved at bruge tilføje en ekstra
worktree
er at man:
- ikke henter alt ned igen,
- hvis det man sidder og arbejder på divergerer meget fra det man har i produktion, kan ens editor godt brokke sig lidt
- hvis det man sidder og arbejder på divergerer meget fra det man har i produktion kan det godt være irriterende at skulle bygge det hele igen
Det her er noget jeg selv vil til at bruge i mit workflow, i stedet for at stashe. Jeg har læst om andre som bruger det i deres workflow, hvor de bruger det til at køre tests med, mens de udvikler (da deres tests tog lidt tid om at køre), og andre igen, som diff'ede det de sad med, og sammenlignede det med produktion, hvis der var en fejl. Mulighederne er mange!
Smid endelig en kommentar nedenunder, hvis du har forslag, rettelser, eller bare gerne vil fortælle mig at det jeg gør er fuldstændig hen i vejret. Jeg er ikke selv en Gnu til Git (no prune intented .. LOL), men jeg er altid klar på at lære!
Stay git, and please covid, jeg mener, commit. Eller. SES!!