Eines der geilsten Features von Git. Gleichzeitig eines der am wenigsten benutzten Features.
Folgende Situation:
Ihr seid gerade an eurem feature/blubb_feature dran und dann kommt ein MR vom Kollegen, wo ihr bitte ganz schnell hotfix/make_that_users_dont_die_immediately reviewen sollt, damit das super flott live gehen kann. Leider ist der Branch zu komplex um alles direkt im Gitlab zu machen.
Also wirklich auschecken und deep-dive in den Code...
Klassisches Vorgehen
git stasheurer Änderungengit checkout hotfix/...um den Branch anzugucken und alles durchzugehen.- Freigabe oder eben nicht
Viel besseres Vorgehen
Ihr habt git worktree eingerichtet (ist nativ bei git dabei) und habt sowieso schon folgende Ordnerstruktur:
project_name/
- main/
- develop/
- feature/
- blubb_feature/
- hotfix/
- make_that_users_dont_die_immediately/Jeder Ordner ist quasi ein eigenes Git Repository. Aber alle teilen sich die Git Metadaten. Euer aktueller Stand bleibt also unangetastet. Ein git worktree add BRANCH_NAME reicht und ein Ordner, der auf einen zeigt, wird für euch erstellt.
Aber wie geht das jetzt?
Super simpel - wirklich :).
mkdir my_project(Projektverzeichnis erstellen) und viacddort rein wechseln:cd my_project- Repository klonen (Achtung - hier ist die erste Besonderheit)
git clone --bare GIT_URL .bare.- Wir klonen also nur das bare Repository ohne einen Branch auszuchecken
- Diese Metadaten speichern wir im Ordner
.bare(Durch den.am Anfang ist der Ordner unter MacOS/Linux versteckt)
- Eine Datei
my_project/.giterstellen und folgende Zeile eintragen:
Damit weiß Git jetzt, wo sich unsere Repository Metadaten befindengitdir: ./.bare - Ab jetzt funktioniert worktree perfekt:
git worktree add mainfügt unseren Main-Branch hinzugit worktree add feature/ABC_new_stuff_to_play feature/ABC_new_stuff_to_playum Branches mit/im Namen auszuchecken oder zu erstellen- Ihr könnt aber auch beliebig im Dateisystem euren Ordner mit dem Branch erstellen. Das Format sieht in etwa so aus:
git worktree add PATH BRANCHNAME
Weitere hilfreiche Befehle
- Branch löschen:
- Variante 1:
rm -r BRANCH_NAMEund danngit worktree prune - Variante 2:
git worktree listListet alle worktree branches.
- Variante 1:
- Branch verschieben:
git worktree move SOURCE DESTINATION