@werk/gitgo (0.1.0)
Installation
@werk:registry=https://gitlab.amandy.love/api/packages/werk/npm/npm install @werk/gitgo@0.1.0"@werk/gitgo": "0.1.0"About this package
gitgo
Kleine TypeScript/Bun-CLI fuer Git-Identitaeten, SSH-Keys und Remotes pro Ziel.
Das Problem, das sie loest:
git user.nameundgit user.emailsind Git-Commit-Identitaet, aber nicht die SSH-Authentifizierung.~/.ssh/configgreift nur bei SSH-URLs wiegit@scm.logicalis.de:gruppe/repo.git.- Wenn ein Remote
https://...ist, werden SSH-Keys nie benutzt. Dann fragt Git oderghnach HTTPS-Credentials. - Mehrere Keys fuer denselben echten Host brauchen entweder SSH-Host-Aliase oder einen expliziten
GIT_SSH_COMMAND.
gitgo push setzt den passenden GIT_SSH_COMMAND fuer genau diesen Push. Dadurch musst du nicht global deine komplette Git- oder SSH-Konfiguration umstellen.
Installation
bun run src/cli.ts install
Das schreibt einen Bun-Bundle nach ~/.local/share/gitgo/cli.js und einen Wrapper nach ~/.local/bin/gitgo.
Falls gitgo danach nicht gefunden wird, muss ~/.local/bin in deinem PATH sein.
Direkt aus dem Projekt geht immer:
bun run src/cli.ts
Normaler Flow
gitgo
Ohne Unterbefehl macht gitgo jetzt den gefuehrten Flow:
- findet das aktuelle Git-Repo oder fuehrt
git initim aktuellen Ordner aus - legt beim ersten Start
~/.config/gitgo/config.jsonmit sinnvollen Defaults an - zeigt Branch, Git-Identitaet und Remotes
- erkennt Profile ueber Remote-Hosts wie
scm.logicalis.deodergithub.com - bietet vorhandene Remotes direkt als Push-Aktionen an
- legt neue Remotes mit vorbefuellter SSH-URL an
- setzt fuer den Push
GIT_SSH_COMMANDmit dem richtigen Key - setzt lokal im Repo
user.nameunduser.emailauf das gewaehlte Profil - erkennt
fetch first/Non-Fast-Forward-Rejections und bietetfetch+pull --rebase+ erneuten Push an
Du kannst eine Git-Remote-URL auch direkt als erstes Argument geben:
gitgo git@scm.logicalis.de:infradev/aurora/infra/regelwerk.git
Dann behandelt gitgo diese URL als Ziel, matcht das passende Profil ueber den Host, schlaegt einen Remote-Namen vor und setzt oder aktualisiert diesen Remote. Wenn ein passender Remote bereits existiert, wird dessen Name bevorzugt.
Konfiguration
gitgo init
Dann ~/.config/gitgo/config.json bearbeiten. Beispiel:
{
"version": 1,
"defaultProfile": "personal",
"profiles": {
"personal": {
"gitName": "Amelie Krippner",
"gitEmail": "amelie@example.com",
"sshKey": "~/.ssh/id_ed25519_personal",
"remoteOwner": "sayore",
"defaultRemoteName": "origin",
"defaultBranch": "main",
"hosts": [
{
"host": "github.com-personal",
"hostname": "github.com",
"user": "git",
"match": ["github.com"]
}
]
},
"logicalis": {
"gitName": "Amelie Krippner",
"gitEmail": "amelie.krippner@logicalis.de",
"sshKey": "~/.ssh/id_ed25519_amykrippner",
"remoteOwner": "amelie.krippner",
"defaultRemoteName": "logicalis",
"defaultBranch": "main",
"hosts": [
{
"host": "scm.logicalis.de",
"hostname": "scm.logicalis.de",
"user": "git"
}
]
}
}
}
Dein Logicalis-Push
Im normalen Fall reicht im Repo:
gitgo
Oder direkt mit Ziel-Remote:
gitgo git@scm.logicalis.de:infradev/aurora/infra/regelwerk.git
Wenn das Repo regelwerk heisst und du logicalis waehlst, schlaegt gitgo diese URL vor:
git@scm.logicalis.de:amelie.krippner/regelwerk.git
Bei GitHub mit dem personal-Profil entsprechend:
git@github.com-personal:sayore/regelwerk.git
Du kannst im Prompt auch nur regelwerk oder amelie.krippner/regelwerk eingeben; gitgo baut daraus die SSH-URL.
Die direkten Befehle gibt es weiter:
gitgo remote set logicalis git@scm.logicalis.de:amelie.krippner/regelwerk.git --profile logicalis --repo /pfad/zum/repo
gitgo push logicalis main --profile logicalis --repo /pfad/zum/repo -u
gitgo use logicalis --repo /pfad/zum/repo
gitgo whoami --repo /pfad/zum/repo
Das setzt lokal im Repo:
user.nameuser.emailcore.sshCommand
Fuer mehrere Remotes mit unterschiedlichen Keys ist gitgo push --profile ... meist sauberer als ein permanenter core.sshCommand, weil der SSH-Key dann nur fuer diesen Push gilt.
SSH-Config erzeugen
Nur anzeigen:
gitgo ssh-config print logicalis
In ~/.ssh/config installieren:
gitgo ssh-config install logicalis
Der Block wird als von gitgo verwalteter Block oben eingefuegt; eine bestehende Config wird vorher als *.gitgo-backup-* gesichert.
Diagnose
gitgo doctor logicalis --host scm.logicalis.de --repo /pfad/zum/repo
Wenn ssh -G scm.logicalis.de nicht user git und den erwarteten identityfile zeigt, matcht deine SSH-Config nicht so, wie du denkst.
Wenn dein Remote https://scm.logicalis.de/... ist, ist das die Ursache: SSH-Config und SSH-Keys koennen dann nicht greifen. Stelle den Remote auf git@scm.logicalis.de:... um.
Wenn der Push mit fetch first abgelehnt wird, liegen auf dem Remote schon Commits, die lokal fehlen. Im interaktiven Flow bietet gitgo dann an:
git fetch <remote>
git pull --rebase <remote> <branch>
git push -u <remote> <branch>
Es macht dabei keinen Force-Push. Wenn der Rebase Konflikte findet, musst du sie loesen und danach git rebase --continue ausfuehren.
Wenn gh HTTPS-Remotes erzeugt, pruefe:
gh config get git_protocol
gh config set git_protocol ssh
Fuer den eigentlichen Push zu scm.logicalis.de brauchst du gh nicht. Nutze direkt git bzw. gitgo push.
Dependencies
Dependencies
| ID | Version |
|---|---|
| @tauri-apps/api | ^2.11.1 |
Development Dependencies
| ID | Version |
|---|---|
| @tauri-apps/cli | ^2.11.4 |
| vite | ^8.1.3 |