git alias: Automatisch Default Branch auschecken [gelöst]

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
nudgegoonies
Beiträge: 939
Registriert: 16.02.2009 09:35:10

git alias: Automatisch Default Branch auschecken [gelöst]

Beitrag von nudgegoonies » 10.01.2022 14:34:40

Ich habe beruflich ca. 150 Git Projekte auf meiner Platte und immer mehr wechseln von master auf main. Ich habe keinen Überblick mehr, wie der jeweilige Default Branch in den Projekten heißt. Hat jemand zufällig das selbe Problem und dafür schon einen Alias geschrieben? Ich habe erst mal nichts im Netz dazu gefunden, das in plain git funktioniert.

Da bei mir fast alle Repos in Gitlab Instanzen sind, hatte ich schon überlegt, den Default Branch via API abzufragen. Aber eine universelle git Lösung wäre schon besser.

Ein andere Idee war die heads zu filtern ob entweder main oder master vorhanden ist und den jeweiligen auszuchecken und direkt zu pullen. Dann könnte ich mir auch wieder abgewöhnen, wenn ich auf Branches arbeite, den Default Branch zu löschen. Ich hatte damit angefangen, weil ich nach dem Mergen via Gitlab Merge-Request häufig vergessen hatte, nach dem lokalen checkout des Default Branch sofort ein git pull zu machen, um meine Änderungen vom Branch auf im lokalen Default Branch zu haben.
Zuletzt geändert von nudgegoonies am 11.01.2022 12:54:25, insgesamt 1-mal geändert.
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: git alias: Automatisch Default Branch auschecken

Beitrag von Meillo » 10.01.2022 16:30:58

Rein interessehalber: Was ist denn der Grund dafuer, dass man als Default-Branch nicht master sondern etwas anderes nimmt? Ich sehe keinen Nutzen dafuer und nur Probleme und Schwierigkeiten wie du sie nun hast. :roll:


Um aber auf deine Frage zurueckzukommen. Vielleicht kannst du einen Alias anlegen und dann mit `master' arbeiten, was intern automatisch auf `main' umgebogen wird. `git symbolic-ref' scheint sowas in der Art zu bieten. Aber das sagt nur das Internet. Ich habe keine Praxiserfahrung damit.
Use ed once in a while!

nudgegoonies
Beiträge: 939
Registriert: 16.02.2009 09:35:10

Re: git alias: Automatisch Default Branch auschecken

Beitrag von nudgegoonies » 10.01.2022 17:04:04

Es sind sowohl interne als auch externe Projekte. Manche sind auf git flow umgestiegen. Andere haben master in main umbenannt wegen diskriminierender Sprache und neue Projekte haben als Default schon main.

Danke für den Tip mit symbolic-ref. Natürlich kann man lokale branches benennen wie man will. Dann heißt der lokale branch main und der remote master oder anders rum. Dafür müsste ich aber sehr viele Projekte einmal "anfassen".

Da bei uns aber auch ein paar andere "kreative" Namen für den Default Branch existieren ist für mich persönlich ein Alias, dass die Gitlab API abfragt, wohl das beste:
https://docs.gitlab.com/ee/api/branches.html

Ich werde mal schauen, wie ich das als Script verpacke und als alias eintrage.
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.

Benutzeravatar
MSfree
Beiträge: 11604
Registriert: 25.09.2007 19:59:30

Re: git alias: Automatisch Default Branch auschecken

Beitrag von MSfree » 10.01.2022 17:30:48

Meillo hat geschrieben: ↑ zum Beitrag ↑
10.01.2022 16:30:58
Was ist denn der Grund dafuer, dass man als Default-Branch nicht master sondern etwas anderes nimmt?
Der Grund ist political Correctness (kein Scherz).

Begriffe, die an die Sklaverei erinnern (z.B. Master, Slave, Server) werden im Land der begrenzten Unmöglichkeiten als beleidigend empfunden. Ist hier im Betrieb auch so, die wollen Weg von diesen Begriffen und das wird dann an allen möglichen und unmöglichen Stelle versucht, durchzusetzen.

nudgegoonies
Beiträge: 939
Registriert: 16.02.2009 09:35:10

Re: git alias: Automatisch Default Branch auschecken

Beitrag von nudgegoonies » 10.01.2022 18:09:09

Sieht man auch bei anderen Projekten. Der "Jenkins Master" heißt jetzt "Jenkins Server" und die "Jenkins Slaves" heißen jetzt "Jenkins Agents".

Aber wie gesagt, es gibt auch andere Gründe, weshalb der Name des Default Branch nicht immer master ist. Wir mussten schon viel früher in unseren Gitlab CI Skripten die Variable CI_DEFAULT_BRANCH nutzen.
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.

Benutzeravatar
Meillo
Moderator
Beiträge: 9224
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: git alias: Automatisch Default Branch auschecken

Beitrag von Meillo » 10.01.2022 18:35:00

Danke fuer die Erklaerungen!
nudgegoonies hat geschrieben: ↑ zum Beitrag ↑
10.01.2022 18:09:09
Sieht man auch bei anderen Projekten. Der "Jenkins Master" heißt jetzt "Jenkins Server" und die "Jenkins Slaves" heißen jetzt "Jenkins Agents".
Agents ist ja auch nicht viel besser, nachdem in Russland, China, Indien und weiteren Laendern Personen und NGOs als westliche Agenten diskriminiert und aus politischen Gruenden verhaftet werden. :roll:
Aber wie gesagt, es gibt auch andere Gründe, weshalb der Name des Default Branch nicht immer master ist. Wir mussten schon viel früher in unseren Gitlab CI Skripten die Variable CI_DEFAULT_BRANCH nutzen.
Ich wollte auch nicht viel mehr von der technischen Frage ablenken.
Use ed once in a while!

nudgegoonies
Beiträge: 939
Registriert: 16.02.2009 09:35:10

Re: git alias: Automatisch Default Branch auschecken

Beitrag von nudgegoonies » 11.01.2022 12:53:57

Ich hatte schon eine funktionierende Lösung via Gitlab API. Aber mein Chef hatte noch den Tipp mit git ls-remote und dem HEAD. Diese 2 Zeilen tun es:

Code: Alles auswählen

#!/bin/bash
set -e
HEAD=$(git ls-remote -q | head -n1 | cut -f 1)
git ls-remote --heads -q | grep $HEAD | cut -d '/' -f3
Habe mir dann einen alias erstellt, der "!git switch $(git_checkout_default_branch)" aufruft.
Soft: Bullseye AMD64, MATE Desktop. Repo's: Backports, kein Proposed, eigene Backports. Grafik: Radeon R7 360 MESA.
Hardware: Thinkstation S20, Intel X58, 16GB, Xeon W3530, BCM5755 NIC, EMU10K1 SND, SATA SSD+HDS und DVD+RW.

Antworten