werk

@werk/gitgo (0.1.0)

Published 2026-07-26 20:10:51 +02:00 by amelie

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

Profile-based Git identity and SSH-key helper for multi-remote pushes.

gitgo

Kleine TypeScript/Bun-CLI fuer Git-Identitaeten, SSH-Keys und Remotes pro Ziel.

Das Problem, das sie loest:

  • git user.name und git user.email sind Git-Commit-Identitaet, aber nicht die SSH-Authentifizierung.
  • ~/.ssh/config greift nur bei SSH-URLs wie git@scm.logicalis.de:gruppe/repo.git.
  • Wenn ein Remote https://... ist, werden SSH-Keys nie benutzt. Dann fragt Git oder gh nach 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 init im aktuellen Ordner aus
  • legt beim ersten Start ~/.config/gitgo/config.json mit sinnvollen Defaults an
  • zeigt Branch, Git-Identitaet und Remotes
  • erkennt Profile ueber Remote-Hosts wie scm.logicalis.de oder github.com
  • bietet vorhandene Remotes direkt als Push-Aktionen an
  • legt neue Remotes mit vorbefuellter SSH-URL an
  • setzt fuer den Push GIT_SSH_COMMAND mit dem richtigen Key
  • setzt lokal im Repo user.name und user.email auf das gewaehlte Profil
  • erkennt fetch first/Non-Fast-Forward-Rejections und bietet fetch + 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.name
  • user.email
  • core.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
Details
npm
2026-07-26 20:10:51 +02:00
1
latest
570 KiB
Assets (1)
gitgo-0.1.0.tgz 570 KiB
Versions (1) View all
0.1.0 2026-07-26