Byt mellan GitHub-konton med gh CLI och Bash

Jag har olika konton på Github som jag använder till olika projekt. Här delar jag med mig två tips på hur du kan byta mellan dina konton baserat på vilket projekt du befinner dig i.

Det är superpraktiskt att kunna pusha kod till med rätt git användare utan att logga ut och in hela tiden. GitHub CLI har ett kommando som heter gh auth switch som verkar lösa allt, men jag märkte att mina commits inte blev med kontot som jag redan hade bytt till. Jag behövde starta om min Kitty terminal för att den förändringen skulle ske. Men så ska det inte behöva vara. Jobbar jag i terminalen så vill jag helst inte behöva lämna den och jobbet jag håller på med där för att något måste ladda om.

Vad gör egentligen gh auth switch?

gh auth switch byter vilken GitHub-användare som är aktiv i GitHub CLI-verktyget. Det påverkar:

  • Vilket konto gh-kommandon använder (t.ex. gh pr create, gh issue list, gh repo clone)
  • Vilken autentisering Git använder när du kör git push / git pull över HTTPS – om du har kört gh auth setup-git en gång

Det påverkar inte:

  • Git-konfigurationen för mina commits alltså user.name och user.email i det här fallet.

Det finns en väldigt simpel lösning på detta och det är att ange vilken Github-användare som ska tillhöra vilket projekt, alltså mapp i mitt fall. Jag har två disjunktiva mappar som delar upp mina projekt i privat och jobb-projekt. Så här gör du:

1# Gå in i ditt privata projekt
2git config --local user.name "Lars Jönsson"
3git config --local user.email "crymeat@gmail.com"
4
5# och samma gäller för ditt jobbprojekt
6git config --local user.name "Lars Jönsson"
7git config --local user.email "info@noveris.se"

Det var inte så svårt.

Men det finns en lösning till som jag valt att köra på. Mest för att jag gillar att pilla i bash och CLI:s i övrigt. Jag har skapat ett bash script som byter allt samtidigt.

1#!/bin/bash
2
3case "$1" in
4 "personal")
5 git config --global user.name "Lars Jönsson"
6 git config --global user.email "crymeat@gmail.com"
7 echo "Switching to devpaps git account..."
8
9 # Make devpaps active GitHub CLI account
10 gh auth status | grep "devpaps" > /dev/null
11 if [ $? -eq 0 ]; then
12 gh auth switch -h github.com -u devpaps
13 else
14 echo "devpaps not logged in via gh. Logging in..."
15 gh auth login --hostname github.com
16 fi
17 ;;
18 "work")
19 git config --global user.name "Lars Jönsson"
20 git config --global user.email "info@noveris.se"
21 echo "Switching to Noveris git account..."
22
23 # Make noveris-hq active GitHub CLI account
24 gh auth status | grep "noveris-hq" > /dev/null
25 if [ $? -eq 0 ]; then
26 gh auth switch -h github.com -u noveris-hq
27 else
28 echo "noveris-hq not logged in via gh. Logging in..."
29 gh auth login --hostname github.com
30 fi
31 ;;
32 *)
33 echo "Usage: $0 {personal|work}"
34 exit 1
35 ;;
36esac
37
38# Show current Git user configuration
39echo -e "\nCurrent Git configuration:"
40echo "Name: $(git config --global user.name)"
41echo "Email: $(git config --global user.email)"
42
43echo "Reloading shell to apply GitHub credentials..."
44exec $SHELL

Det scriptet gör är att först sätta mitt namn och e-post som min git användare, sedan kollar det om noveris-hq är autentiserat med gh-cli, om så är fallet så ändras även min användare i gh-cli till noveris-hq, om inte, så måste jag logga in via gh-cli.

För att använda det här bash scriptet behöver jag bara skriva:

1noveris on main +95 -93 [$!?] via v22.20.0 via 🐘 v8.5.4 ❯ switchgh work
2Switching to Noveris git account...
3 Switched active account for github.com to noveris-hq
4
5Current Git configuration:
6Name: Lars Jönsson
7Email: info@noveris.se
8Reloading shell to apply GitHub credentials...

Allt sköts allt automatiskt åt mig. Det här är riktigt bra tycker jag. Sedan känner man sig lite som en hacker när man får skriva kommandon i terminalen, vilket är en bonus.

Det kan vara så att det är lite overkill med mitt bash skript, men vad gör det om hundra år?

Mastodon