GitHub-Repositories aufräumen
Vor ein paar Wochen las ich "How I Organize my GitHub Repositories" von Andrei Cioara und fand die Idee interessant, die Repositories thematisch in Organisationen einzuordnen und so übersichtlicher zu gestalten.
Seither habe ich drei Organisationen bei GitHub angelegt:
- matwei-books: mit den Quelldateien für einige meiner Bücher.
- matwei-forks: mit Forks von anderen Repositories, für die ich etwas bearbeitet hatte.
- matwei-perl: mit meinen Perl-Modulen.
Bei einigen dieser Perl-Module hatte ich in der Beschreibung einen Link zum GitHub-Repository, den ich noch anpassen musste. Da ich dafür eine neue Patchversion für das Modul vergab, habe ich die Gelegenheit genutzt und auf andere Branches sowie einen anderen Workflow umgestellt.
Die meisten Perl-Module waren früher unter Versionsverwaltung mit Monotone, einige vorher schon unter CVS. Anfang diesen Jahres hatte ich sie nach Git migriert. Hier waren alle Commits im Zweig master.
Zukünftig wollte ich mit zwei ständigen und einigen temporären Zweigen arbeiten.
Im Zweig dev sollen alle laufenden Änderungen eingearbeitet werden.
Der Zweig main enthält die freigegebenen Versionen,
die von dev mittels git merge --squash
übernommen werden.
Weitere Zweige für Hotfixes und Features gibt es nach Bedarf.
Deren Änderungen werden dann mit git merge --squash
übernommen.
Da nach git merge --squash
noch ein git commit
nötig ist,
bei dem die zusammengefassten Commits beschrieben werden,
ist anschließend der Zweig main verschieden von dev,
obwohl der enthaltene Quellcode identisch ist.
Ein Merge von main nach dev bringt sie wieder auf den gleichen Stand.
Damit geht der nächste Merge von dev nach main schneller.
Um von der alten Struktur mit dem Zweig master auf diese neue Struktur zu kommen,
habe ich zunächst mit git log --oneline
den ältesten Commit in master ermittelt
und ausgecheckt.
Von diesem ausgehend habe ich den Zeig main und dev angelegt.
$oldest=$(git log --oneline|tail -1|cut -d\ -f1)
git checkout $oldest
git checkout -b main
git checkout -b dev
Anschließend habe ich im Zweig dev alle Änderungen von master übernommen.
git merge master
Danach habe ich den Link zum Repository angepasst, noch etwas aufgeräumt und eine neue Patchversion vorbereitet. Wenn diese fertig war, habe ich alle eingecheckten Änderungen nach main übernommen.
git checkout main
git merge --squash dev
git commit
Diese Revision bekommt als Tag die Versionsnummer. Anschließend habe ich diesen Stand von main wieder zurück nach dev übernommen.
git checkout dev
git merge main
Das Ergebnis sieht zum Beispiel für File-PCAP so aus:
$ git log --all --decorate --oneline --graph
* 6a6f0d3 (origin/dev, dev) Merge branch 'main' into dev
|\
| * d6c8d9c (HEAD -> main, tag: v0.1.1, origin/main) move on GitHub
* | 23889d2 bump version to v0.1.1
* | dadc3b6 ignore MYMETA.{json,yml}
* | d4e9f91 move on GitHub
* | ad10faa remove MYMETA.{json,yml} from repository
* | 923ecf2 Merge branch 'main' into dev
|\|
| * 754c026 (tag: v0.1.0) Changes till v0.1.0
* | 718cb3d (origin/master, origin/HEAD, master) added links to repository and bug tracker
* | 427adaf fix bug #128748 (determine startday with gmtime)
* | e8b2439 Fix Bug #128720 (open with binmode), v0.0.8
* | dd44c5f handle startday and day rollover for capture
* | 6be3828 bumped up to v0.0.7
* | da1eaff test for crossing of midnight
* | f14f42d change time to UTC and handle crossing of midnight
* | 3675576 changed method next_packet() to return nothing on EOF
|/
* 5904a81 Initial
Der Zweig master endet bei 718cb3d
,
alle Änderungen bis dahin sind in dem Commit 754c026
zusammengefasst,
dieser ist als 923ecf2
in dev eingegangen.
Bis Commit 23889d2
habe ich in dev die Änderungen für v0.1.1 verfolgt
und diese gesammelt mit Commit d6c8d9c
nach main übernommen.
Diesen Commit habe ich anschließend als 6a6f0d3
mit dev abgeglichen.
Damit sieht der Zweig main sehr übersichtlich aus
$ git log main
commit d6c8d9cc0900bdfe9cc03f541ace70892fc7a7a4 (HEAD -> main, tag: v0.1.1, origin/main)
Author: Mathias Weidner <mathias@mamawe.net>
Date: Tue Dec 21 11:09:37 2021 +0100
move on GitHub
bump version to v0.1.1
move on GitHub
remove MYMETA.{json,yml} from repository
commit 754c026a519298cc9d9d70b361240f5065731e21 (tag: v0.1.0)
Author: Mathias Weidner <mathias@mamawe.net>
Date: Tue Dec 21 10:56:32 2021 +0100
Changes till v0.1.0
added links to repository and bug tracker
fix bug #128748 (determine startday with gmtime)
Fix Bug #128720 (open with binmode), v0.0.8
handle startday and day rollover for capture
test for crossing of midnight
change time to UTC and handle crossing of midnight
changed method next_packet() to return nothing on EOF
commit 5904a811fcd8329d48c0549ef1e8eb00e7037c4a
Author: Mathias Weidner <buecher@mamawe.net>
Date: Wed Dec 13 02:49:39 2017 +0100
Initial
Am Schluß habe ich die Zweige main und dev sowie die Tags mit GitHub synchronisiert und schließlich dort das Repository verschoben.
Der Zweig master ist zwar immer noch vorhanden, wird aber nicht mehr verwendet. Diesen werde ich später entfernen.
Posted 2021-12-31