Wie richte ich Benutzernamen und Passwörter für verschiedene Git-Repos ein?

16
─[$] cat ~/.gitconfig

[user]
    name = Shirish Agarwal
    email = [email protected]
[core]
    editor = leafpad
    excludesfiles = /home/shirish/.gitignore
    gitproxy = \"ssh\" for gitorious.org
[merge]
    tool = meld
[push]
    default = simple
[color]
    ui = true
    status = auto
    branch = auto

Jetzt möchte ich meine git-Anmeldeinformationen für github, gitlab und gitorious speichern, damit ich nicht jedes Mal die Anmeldeinformationen im Browser nachschlagen muss. Wie geht das, damit es automatisiert wird?

Ich laufe zsh

shirish
quelle

Antworten:

19

Verwendung von SSH

Der übliche Ansatz für die Handhabung der Git-Authentifizierung besteht darin, sie an SSH zu delegieren. Normalerweise legen Sie Ihren öffentlichen SSH-Schlüssel im Remote-Repository ( z. B. auf GitHub ) fest und verwenden ihn dann, wenn Sie sich authentifizieren müssen. Natürlich können Sie einen Schlüsselagenten verwenden, der entweder von Ihrer Desktop-Umgebung oder manuell mit ssh-agentund verwaltet wirdssh-add .

Um nicht den Benutzernamen angeben zu müssen, können Sie diesen auch in SSH konfigurieren ~/.ssh/config. zum Beispiel habe ich

Host git.opendaylight.org
  User skitt

und dann kann ich mit klonen

git clone ssh://git.opendaylight.org:29418/aaa

(Beachten Sie das Fehlen eines Benutzernamens).

Verwenden gitcredentials

Wenn der SSH-Ansatz nicht angewendet wird ( z. B. wenn Sie ein Repository verwenden, auf das über HTTPS zugegriffen wird), verwendet git gitcredentials(und normalerweise git-credential-store) eine eigene Methode zum Behandeln von Anmeldeinformationen . Sie geben Ihren Benutzernamen mit

git config credential.${remote}.username yourusername

und der Anmeldeinformationshelfer verwendet

git config credential.helper store

(Geben --globalSie an , ob Sie dieses Setup überall verwenden möchten.)

Wenn Sie dann zum ersten Mal auf ein Repository zugreifen, werden Sie von git nach Ihrem Kennwort gefragt und es wird gespeichert (standardmäßig in ~/.git-credentials). Bei späteren Zugriffen auf das Repository wird das gespeicherte Kennwort verwendet, anstatt Sie nachzufragen.

Stephen Kitt
quelle
1
können Sie ein wenig über erarbeiten credential.${remote} und credential.helper. Gibt es eine Dokumentation, auf die Sie hinweisen können, da ich zum ersten Mal darüber lese?
Shirish
Ich habe in meiner Antwort auf die Hilfeseiten verlinkt, das ist die Dokumentation. ${remote}Der Protokoll- und Hostname-Teil der URI, die Sie klonen möchten, helperverweist auf ein Hilfsprogramm.
Stephen Kitt
1
Es gibt auch ein Kapitel von Pro Git zum Thema.
Stephen Kitt
6

Für diejenigen, die das später fanden - ich hatte Schwierigkeiten damit und brachte es schließlich zum Laufen

https / credentials.helper / Ubuntu

  1. Global deaktivieren:
    git config --global --unset credentials.helper
  2. Lokal nicht gesetzt: (In jedem Repo) git config --unset credential.helper
  3. Erstellen Sie eine Anmeldedatei für jedes Repo: (in jedem Repo)

    git config credential.helper 'store --file ~/.git_reponame_credentials'
    

Nicht zu sagen, dass es der beste oder der einzige Weg ist - aber es hat nach einigen frustrierenden Stunden für mich funktioniert.

SteveJ
quelle
scheint ähnlich zu sein, was Stephen Kitt oben geteilt hat.
Shirish
2
@ Shirish nicht wirklich, der dritte Punkt war der, den ich brauchte - Option, um anzugeben, wo sich die Dateien befinden.
Mārtiņš Briedis
@shirish; In den Kitts-Anweisungen wird auch nicht angegeben, wie die Anmeldeinformationen festgelegt werden sollen. Dies war eine wichtige Komponente für mich, da ich sie bereits global festgelegt hatte.
SteveJ
Ich hatte auch Schwierigkeiten damit, da es nicht so ist, als ob alle Git-Repos. Sie erhalten würde von der gleichen Quelle / Geschäft sein. Der zweite ist besser, aber es ist viel frustrierender, in der Realität zu arbeiten. Trotzdem danke fürs Teilen. @SteveJ
shirish