Git ist eine sehr nützliches Tool zur Versionsverwaltung und ist in der Softwareentwicklung sehr verbreitet. Ich nutze das Tool auch sehr gerne, doch ich hatte die Herausforderung, dass ich mit unterschiedlichen Git Servern arbeite. Da habe ich mein Account bei GitHub, ich arbeite mit dem GitLab an meiner Uni und ich hoste noch eine eigene GitLab-Instanz.
Ich arbeite unter Windows und habe mir Git entsprechend installiert. Neben der Einrichtung unterschiedlicher Profile möchte ich auch den Zugriff über SSH einrichten. Ich starte mit der Konfiguration von git.
Konfiguration von git
Als erstes lege ich mir pro Git Server mit dem ich arbeite eine Konfigurationsdatei in meinem Profil Ordner (C:\Users\Lars) an. Die Dateien benenne ich z.B. .gitconfig-thm für die Uni und .gitconfig-github für mein GitHub Account. In dieser Datei werden die Benutzerinformationen in dem folgenden Format hinterlegt:
[user]
name = <Name>
email = <Mail>
Die Benutzerinformationen werden verwendet, damit der Commit von dir deinen Namen und die dazugehörige Mail-Adresse enthält. Den Namen setze ich auf meinen vollständigen Namen. Als Mail trage ich am besten die Mail-Adresse ein, die ich auch bei dem jeweiligen Account verwende.
Als nächstes öffne ich die Konfigurationsdatei, die von git oftmals selbst erstellt wird. Existiert keine .gitconfig Datei, muss ich diese erstellen. Ich werde für jeden Git Server einen Ordner anlegen, in dem ich meine lokalen Repositories ablege, die ich vom Server klone. In jedem Ordner, in dem ich ein Git Repository eines Servers ablegen möchte, muss ich einen Eintrag hinzufügen. Für zwei Git Profile kann die Datei folgendermaßen aussehen:
[includeIf "gitdir:~/git/github/"]
path = .gitconfig-github
[includeIf "gitdir:~/git/thm/"]
path = .gitconfig-thm
Ich habe einen Ordner git in meinem Profil angelegt und zusätzlich einen Unterordner github für meine GitHub Repositories und einen mit dem Namen thm für die Uni. Mit der includeIf Anweisungen kann Git abhängig vom Verzeichnis automatisch entscheiden welche Konfiguration gewählt werden soll. In meinem Fall habe ich die alle Repositories aus GitHub in dem Ordner ~/git/github und für die Uni in dem Ordner ~/git/thm. Der Pfad muss für deinen Fall entsprechend angepasst werden. Zu beachten ist die Schreibweise mit dem Slash und nicht wie unter Windows üblich mit einem Backslash.
SSH Key
Bevor ich jetzt ein Repository von GitHub klonen kann, richte ich mir noch ein SSH Key ein. Mit dem SSH Key kann ich eine verschlüsselte Verbindung zum GitHub Server aufbauen und so etwas verschlüsselt klonen, pushen oder pullen. Das funktioniert nicht nur mit GitHub, sondern bei allen Git Servern, insofern der SSH Dienst eingerichtet ist. Der Vorteil von SSH gegenüber der klassischen Anmeldung ist, dass ich nicht immer mein Benutzername und Kennwort eingeben muss und der Verbindungsaufbau als sicherer gilt, solange ich meinen privaten Schlüssel nicht veröffentliche.
Ich öffne die Git Konsole (Git Bash unter Windows) und navigiere in mein .ssh Verzeichnis.
cd ~/.ssh
Als nächstes generiere ich einen SSH Key. Es gibt verschiedene Varianten von SSH Keys, aber das würde an dieser Stelle zu weit führen. Ich erstelle mit dem folgenden Befehl einen SSH Key mit dem Algorithmus ED25519.
ssh-keygen -t ed25519
Ich werde aufgefordert einen Namen für die Datei einzugeben oder ich bestätige einfach mit Enter, dann wird der Standardname verwendet. Anschließend kannst du eine Art Passwort angeben, um die Sicherheit zu erhöhen. Dies kann aber auch leer gelassen werden.
Public Key hinterlegen
Als nächstes muss ich dem Git Server den Public Key hinterlegen, damit ein verschlüsselter Austausch der Repositories stattfinden kann. Dazu muss ich die Public Datei zum eben erstellten Schlüssel kopieren. Den Wert kann ich mir über die Git Konsole anzeigen und kopieren.
cat id_ed25519_github.pub
Den Wert muss ich nun in GitHub oder auf den anderen Git Servern hinterlegen.
SSH Konfigurationsdatei
Als nächstes muss ich lokal noch eine config Datei im .ssh Ordner anlegen. In dieser Datei sage ich welcher SSH Key für welchen Git Server verwendet wird. In der Datei gebe ich als Host die Domain des Git Servers an. Dem Wert IdentityFile weise ich die jeweilige SSH Key Datei zu. Das sieht bei mir wie folgt aus:
Host github.com
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_ed25519_github
Host git.thm.de
PreferredAuthentications publickey
IdentityFile ~/.ssh/id_ed25519_thm
Anschließend kann ich Repositories von beispielsweise GitHub klonen. Bei dem ersten Verbindungsaufbau muss ich mit yes bestätigen, dass ich die Verbindung aufbauen möchte.