Git: Erste Babyschritte mit Branches und Mergen
Warnung: Das sind die Aufzeichnungen einen Anfängers und keinesfalls als “Best Practise” geeigent. Use at your own risk**
Aber vielleicht hilft es ja auch mal anderen die ersten Schritte zu wagen.
Bisher benutze ich Git nur zu einfachen Versionierung in einem Entwicklungszweig. An Branches und Merges habe ich mich bisher nicht getraut. Es gab noch keinen echten Anwendungsfall.
Folgendes Ziel möchte ich erreichen. Ich habe eine Webseite die ich kopieren und in verschiedenen Situationen einsetzen möchte (die Lizenz lässt das zu). Für die unterschiedlichen Bereiche sollen sowohl textuelle als auch farbliche Anpassungen geschehen. Nun möchte ich natürlich Änderungen die ich im Hauptzeig vollziehe auch automatisch in die verschiedenen anderen Versionen übernehmen.
Git bietet die Funktion von Branches. Die sind zwar eigentlich nicht für so einen Fall vorgesehen da man Branches dazu benutzen soll um Entwicklungen später wieder in den Hauptzweig überführen zu können. Das ist in meinem Fall zwar nicht der Fall aber trotzdem scheint mir dies aktuell die einfachste Möglichkeit zu sein. Wenn man es richtig machen würde sollte man wohl eher mit anderen Ansätzen arbeiten.
Wir haben also ein Git Repository. Von diesem Repository erstellen ich einen Branch
git checkout -b rc-its
Wechseln zwischen den Branches geht mit
git checkout master
git checkout rc-its
In welchem Branch ich bin und welche Branches es gibt findet man so:
git branch -a
* master
rc-its
remotes/origin/master
Wenn ich also auf dem Master Änderungen durchführe (z.B. ein sed-Befehl )
git:(master) find ./ -type f -exec sed -i -e 's/BITS/ITS-RC/g' {} \;
und diese dann einchecke
git:(master) ✗ git commit * -m "bits nach rc-its in allen dokumenten "
git:(master) git push
So kann ich die jetzt durch einen Wechsel des Branches und einen anschließenden Merge aus dem Master in den anderen Zweig übernehmen.
git:(master) git checkout rc-its
git:(rc-its) git merge master
Um jetzt noch den Branch auf gitlab zu pflegen
git:(rc-its) git push -u origin rc-its
Wenn ich jetzt im Branch ein anderes Logo haben möchte dann tauschen ich das einfach aus. Danach sehen wir
git status
Auf Branch rc-its
Ihr Branch ist auf dem selben Stand wie 'origin/rc-its'.
Änderungen, die nicht zum Commit vorgemerkt sind:
(benutzen Sie "git add <Datei>...", um die Änderungen zum Commit vorzumerken)
(benutzen Sie "git checkout -- <Datei>...", um die Änderungen im Arbeitsverzeichnis zu verwerfen)
geändert: bits/images/design/header.jpg
keine Änderungen zum Commit vorgemerkt (benutzen Sie "git add" und/oder "git commit -a")
Ein Commit für das neue Logo
git:(rc-its) ✗ git commit bits/images/design/header.jpg -m " kunden logo"
[rc-its 593eef6] kunden logo
1 file changed, 0 insertions(+), 0 deletions(-)
rewrite bits/images/design/header.jpg (99%)
und dann hoch schieben:
git push
Zähle Objekte: 6, Fertig.
Delta compression using up to 4 threads.
Komprimiere Objekte: 100% (5/5), Fertig.
Schreibe Objekte: 100% (6/6), 67.52 KiB | 0 bytes/s, Fertig.
Total 6 (delta 3), reused 0 (delta 0)
remote:
remote: To create a merge request for rc-its, visit:
remote: https://g.........%5D=rc-its
remote:
To git.......git
d0f277c..593eef6 rc-its -> rc-its
Jetzt wechseln wir wieder in den master
git checkout master
Zu Branch 'master' gewechselt
Ihr Branch ist auf dem selben Stand wie 'origin/master'.
Und sehen das originale Logo. Nun wollen wir die nächste Hauptänderung machen
git:(master) find ./ -type f -exec sed -i -e 's/Behörden-IT-Sicherheitstraining/IT-Sicherheitstraining/g' {} \;
git:(master) ✗ git commit * -m "Behörden-it-sicherheits... in IT-Sicherheitstraining geändert"
git:(master) git push
Der Branchwechsel
git:(master) git checkout rc-its
Zu Branch 'rc-its' gewechselt
Ihr Branch ist auf dem selben Stand wie 'origin/rc-its'.
➜ ...... git:(rc-its)
Die Webseite hat noch das Kundenlogo und den alten Titel
git:(rc-its) git merge master
TATATAA: Die Webseite hat das Kundenlogo und neuen Titel