weidner/archives/2021/12/

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:

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
Tags: