Gibt es eine Möglichkeit, GitHub-Anmeldeinformationen für das Pushing von Commits zwischenzuspeichern?


1867

Ich habe kürzlich auf die Synchronisierung meiner Repositorys mit https: // auf GitHub umgestellt (aufgrund von Firewall-Problemen) und jedes Mal nach einem Kennwort gefragt.

Gibt es eine Möglichkeit, die Anmeldeinformationen zwischenzuspeichern, anstatt sich jedes Mal zu authentifizieren git push?



2
Sie können jetzt einen Helfer für Anmeldeinformationen verwenden, um die _netrcDatei mit Ihren Anmeldeinformationen zu verschlüsseln . Siehe meine Antwort unten . Ich fand das sicherer als den git-credential-winstore.exe(Speicher-Cache), der unter Windows etwas fehlerhaft ist.
VonC


git-credential-winstorefunktionierte am besten für Windows. Was ist fehlerhaft? Das Einrichten von ssh ist die bevorzugte Option, obwohl ich es mehrmals gemacht habe, es ist viel fehleranfälliger und manchmal funktioniert es einfach nicht, wenn Sie eine Verbindung zu mehreren Hosts herstellen müssen.
Bron Davies

2
Mit "SSH-Zertifikat" meinen Sie vermutlich "SSH-Privatschlüssel".
Michael Mior

Antworten:


2369

Mit Git Version 1.7.9 und höher

Seit Git 1.7.9 (veröffentlicht Ende Januar 2012) gibt es in Git einen netten Mechanismus, mit dem Sie vermeiden müssen, dass Sie Ihr Kennwort für HTTP / HTTPS ständig eingeben müssen. Dies wird als Hilfe für Anmeldeinformationen bezeichnet . (Vielen Dank an dazonic für den Hinweis auf diese neue Funktion in den Kommentaren unten.)

Mit Git 1.7.9 oder höher können Sie nur einen der folgenden Helfer für Anmeldeinformationen verwenden:

git config --global credential.helper cache

... was Git anweist, Ihr Passwort (standardmäßig) 15 Minuten lang im Speicher zu speichern. Sie können eine längere Zeitüberschreitung festlegen mit:

git config --global credential.helper "cache --timeout=3600"

(Dieses Beispiel wurde auf der GitHub-Hilfeseite für Linux vorgeschlagen .) Sie können Ihre Anmeldeinformationen bei Bedarf auch dauerhaft speichern, siehe die anderen Antworten unten.

Die Hilfe von GitHub schlägt außerdem vor, dass Sie den nativen Mac OS X-Keystore verwenden können , wenn Sie unter Mac OS X arbeiten und Git mit Homebrew installiert haben:

git config --global credential.helper osxkeychain

Für Windows gibt es einen Helfer namens Git Credential Manager für Windows oder wincred in msysgit .

git config --global credential.helper wincred # obsolete

Mit Git für Windows 2.7.3+ (März 2016):

git config --global credential.helper manager

Für Linux können Sie verwendengnome-keyring (oder andere Schlüsselbund Implementierung wie KWallet).

Mit Git-Versionen vor 1.7.9

Bei Git-Versionen vor 1.7.9 ist diese sicherere Option nicht verfügbar, und Sie müssen die URL ändern, die Ihre originFernbedienung verwendet, um das Kennwort auf folgende Weise einzuschließen :

https://you:password@github.com/you/example.git

... mit anderen Worten mit :passwordnach dem Benutzernamen und vor dem @.

Sie können eine neue URL für Ihre originFernbedienung festlegen mit:

git config remote.origin.url https://you:password@github.com/you/example.git

Stellen Sie sicher, dass Sie verwenden https, und Sie sollten sich bewusst sein, dass Ihr GitHub-Passwort in diesem Fall im Klartext in Ihrem .gitVerzeichnis gespeichert wird , was offensichtlich unerwünscht ist.

Mit jeder Git-Version (nun, seit Version 0.99)

Ein alternativer Ansatz besteht darin, Ihren Benutzernamen und Ihr Kennwort in Ihre ~/.netrcDatei aufzunehmen. Wie bei der Beibehaltung des Kennworts in der Remote-URL bedeutet dies jedoch, dass Ihr Kennwort im Klartext auf der Festplatte gespeichert wird und daher weniger sicher ist und nicht empfohlen wird. Wenn Sie diesen Ansatz wählen möchten, fügen Sie Ihrer Zeile die folgende Zeile hinzu ~/.netrc:

machine <hostname> login <username> password <password>

... durch <hostname>den Hostnamen des Servers <username>und <password>durch Ihren Benutzernamen und Ihr Passwort ersetzen . Denken Sie auch daran, restriktive Dateisystemberechtigungen für diese Datei festzulegen:

chmod 600 ~/.netrc

Beachten Sie, dass diese Datei unter Windows aufgerufen werden _netrcsollte und Sie möglicherweise die Umgebungsvariable% HOME% definieren müssen. Weitere Informationen finden Sie unter:


72
Speichern Sie Ihr Passwort nicht im Klartext. Ab Git 1.7.9 können Sie Helfer für Anmeldeinformationen verwenden. git config --global credential.helper osxkeychainunter OS X. Für andere Betriebssysteme siehe help.github.com/articles/set-up-git
dazonic

6
FWIW, das osx-Schlüsselbundmaterial ist Teil des Basis-GIT-Quellcodes, es ist keine exklusive Komponente von Brew oder MacPorts oder was auch immer der Geschmack des Monats ist. Und Sie müssen git nicht einmal von Grund auf neu erstellen - einfach cd contrib / credential / osxkeychain / und make ausführen.
Synthesizerpatel

2
Bei der Zwei-Faktor-Authentifizierung müssen Sie das verwenden, was Github als Personenzugriffstoken bezeichnet . In der Tat sollten Sie immer eines verwenden, da Sie im Gegensatz zu einem Passwort steuern können, welchen Zugriff es gewährt. Ersetzen Sie einfach das Passwort in der URL, damit Sie am Ende mit https://username:PERSONAL_ACCESS_TOKEN@github.com/username/project.git. Dadurch werden auf der Festplatte gespeicherte Klartextkennwörter fast sicher genug, um verwendet zu werden.
Russell Stuart

12
git config --global credential.helper cachefunktioniert nicht unter Windows: stackoverflow.com/questions/11693074/… benutze gitcredentialstore unter Windows und sei glücklich
Sebastian J.

8
Gibt es eine Möglichkeit, dieses Timeout auf unendlich einzustellen?
Sudo

720

Sie können Git auch Ihre Anmeldeinformationen dauerhaft speichern lassen, indem Sie Folgendes verwenden:

git config credential.helper store

Hinweis: Während dies praktisch ist, speichert Git Ihre Anmeldeinformationen im Klartext in einer lokalen Datei (.git-Anmeldeinformationen) unter Ihrem Projektverzeichnis (siehe unten für das "Home" -Verzeichnis). Wenn Ihnen das nicht gefällt, löschen Sie diese Datei und wechseln Sie zur Cache-Option.

Wenn Git Sie jedes Mal, wenn eine Verbindung zum Remote-Repository hergestellt werden muss, erneut nach Anmeldeinformationen fragt, können Sie den folgenden Befehl ausführen:

git config --unset credential.helper

So speichern Sie die Kennwörter in .git-credentialsIhrem %HOME%Verzeichnis im Gegensatz zum Projektverzeichnis: Verwenden Sie das --globalFlag

git config --global credential.helper store

7
Unter Windows können Sie ein Hilfsprogramm herunterladen, mit dem Dinge zum Speichern einer verschlüsselten Version Ihres GIT-Kennworts im Windows Creditial Store konfiguriert werden. Siehe Confluence.atlassian.com/display/STASH/…
Contango

76
Ich fand, dass ich --global angeben musste, oder es würde versuchen, die Einstellungen im aktuellen Repository zu speichern:git config --global credential.helper store
Brian Gordon

6
Warum sollte der Cache nicht dauerhaft gespeichert werden? Computer teilen oder so?
Michael J. Calkins

2
@BrianGordon Ich verwende GIT 1.9.5 unter Windows und das --globalFlag war redundant. Auch ohne dieses Flag wurde die Anmeldeinformationsdatei im %USER_HOME%Verzeichnis erstellt.
jFrenetic

2
Womit ist es geschützt, wenn es nicht im Klartext gespeichert wird? Ihr Passwort? Müsste es Sie dann nicht nach Ihrem Administratorkennwort fragen, wenn Sie eine Verbindung zu git herstellen? Ist es nicht etwas seltsam, ein Passwort eingeben zu müssen, um ein anderes Passwort zu erhalten?
Cruncher

101

TLDR; Verwenden Sie eine verschlüsselte Netrc-Datei mit Git 1.8.3+ .

Das Speichern eines Kennworts für eine Git-Repository-HTTPS-URL ist unter Windows mit einem ~/.netrc(Unix) oder %HOME%/_netrc(beachten Sie das _) möglich.

Aber : Diese Datei würde Ihr Passwort im Klartext speichern.

Lösung : Verschlüsseln Sie diese Datei mit GPG (GNU Privacy Guard) und lassen Sie Git sie jedes Mal entschlüsseln, wenn ein Kennwort erforderlich ist (für push/ pull/ fetch/ cloneoperation).


Hinweis: Mit Git 2.18 (Q2 2018) können Sie jetzt das GPG anpassen, mit dem die verschlüsselte .netrcDatei entschlüsselt wird.

Siehe Commit 786ef50 , Commit f07eeed (12. Mai 2018) von Luis Marsano (``) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 017b7c5 , 30. Mai 2018)

git-credential-netrc: gpgOption akzeptieren

git-credential-netrcwurde fest codiert, um mit ' gpg' unabhängig von der Option gpg.program zu entschlüsseln .
Dies ist ein Problem bei Distributionen wie Debian, die das moderne GnuPG als etwas anderes bezeichnen, wie ' gpg2'


Schritt-für-Schritt-Anleitung für Windows

Mit Windows:

(Git hat eine gpg.exein seiner Distribution, aber die Verwendung einer vollständigen GPG-Installation enthält eine gpg-agent.exe, die Ihre Passphrase speichert, die Ihrem GPG-Schlüssel zugeordnet ist.)

  • Installieren Sie gpg4Win Litedie minimale gnupg-Befehlszeilenschnittstelle (nehmen Sie die neuestegpg4win-vanilla-2.X.Y-betaZZ.exe ) und vervollständigen Sie Ihren PATH mit dem GPG-Installationsverzeichnis:

    set PATH=%PATH%:C:\path\to\gpg
    copy C:\path\to\gpg\gpg2.exe C:\path\to\gpg\gpg.exe

(Beachten Sie den copyBefehl ' ': Git benötigt ein Bash-Skript, um den Befehl ' gpg' auszuführen . Da er gpg4win-vanilla-2mitgeliefert wird gpg2.exe, müssen Sie ihn duplizieren.)

  • Erstellen oder importieren Sie einen GPG-Schlüssel und vertrauen Sie ihm:

    gpgp --import aKey
    # or
    gpg --gen-key

(Stellen Sie sicher, dass Sie diesem Schlüssel eine Passphrase geben.)

  • Vertraue diesem Schlüssel

  • Installieren Sie das Hilfsskript für Anmeldeinformationen in einem Verzeichnis in Ihrem %PATH%:

    cd c:\a\fodler\in\your\path
    curl -o c:\prgs\bin\git-credential-netrc https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl

(Achtung: Das Skript wird in Git 2.25.x / 2.26 umbenannt, siehe unten)

(Ja, dies ist ein Bash-Skript, aber es funktioniert unter Windows, da es von Git aufgerufen wird.)

  • Erstellen Sie eine _netrc-Datei im Klartext

    machine a_server.corp.com
    login a_login
    password a_password
    protocol https
    
    machine a_server2.corp.com
    login a_login2
    password a_password2
    protocol https

(Vergessen Sie nicht den protocolTeil ' ': ' http' oder ' https', abhängig von der URL, die Sie verwenden werden.)

  • Verschlüsseln Sie diese Datei:

    gpg -e -r a_recipient _netrc

(Sie können jetzt die Datei löschen_netrc und nur die _netrc.gpgverschlüsselte behalten .)

  • Verwenden Sie diese verschlüsselte Datei:

    git config --local credential.helper "netrc -f C:/path/to/_netrc.gpg -v"

(Beachten Sie das ' /': C:\path\to...würde überhaupt nicht funktionieren.) (Sie können zunächst verwenden, um -v -dzu sehen, was los ist.)

Von nun an entschlüsselt jeder Git-Befehl, der eine HTTP (S) -URL verwendet, für die eine Authentifizierung erforderlich ist, diese _netrc.gpgDatei und verwendet das Login / Passwort, das dem Server zugeordnet ist, mit dem Sie Kontakt aufnehmen. Beim ersten Mal werden Sie von GPG nach der Passphrase Ihres GPG-Schlüssels gefragt, um die Datei zu entschlüsseln. In anderen Fällen stellt der GPG -Agent, der beim ersten GPG-Aufruf automatisch gestartet wird, diese Passphrase für Sie bereit.

Auf diese Weise können Sie mehrere URLs / Anmeldungen / Kennwörter in einer Datei speichern und verschlüsselt auf Ihrer Festplatte speichern.
Ich finde es bequemer als einen "Cache" -Helfer, bei dem Sie sich (einmal pro Sitzung) ein anderes Kennwort für jeden Ihrer Remote-Dienste merken und eingeben müssen, damit dieses Kennwort im Speicher zwischengespeichert wird.


Mit Git 2.26 (Q1 2020) wurde der Beispiel-Helfer für Anmeldeinformationen für die Verwendung .netrcaktualisiert, damit er sofort funktioniert. Siehe Patch / Diskussion .

Siehe Commit 6579d93 , Commit 1c78c78 (20. Dezember 2019) von Denton Liu ( Denton-L) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 1fd27f8 , 25. Dezember 2019)

contrib/credential/netrc: PERL_PATHkonfigurierbar machen

Unterzeichnet von: Denton Liu

Der Shebang-Pfad für den Perl-Dolmetscher git-credential-netrcwar fest codiert.
Einige Benutzer haben es jedoch möglicherweise an einem anderen Ort und müssten das Skript daher manuell bearbeiten.

Fügen Sie .perldem Skript ein Präfix hinzu, um es als Vorlage zu kennzeichnen, und ignorieren Sie die generierte Version.
Erweitern Sie das Makefileso , dass es erzeugt git-credential-netrcaus git-credential-netrc.perl, genau wie andere Perl - Skripten.

Die Makefile-Rezepte wurden schamlos gestohlen contrib/mw-to-git/Makefile.

Und:

Mit 2.26 (Q1 2020) wurde der Beispiel-Helfer für Anmeldeinformationen für die Verwendung von .netrc aktualisiert, damit er sofort funktioniert.

Siehe Commit 6579d93 , Commit 1c78c78 (20. Dezember 2019) von Denton Liu ( Denton-L) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 1fd27f8 , 25. Dezember 2019)

contrib/credential/netrc: außerhalb eines Repos arbeiten

Unterzeichnet von: Denton Liu

Funktioniert derzeit git-credential-netrcnicht außerhalb eines Git-Repositorys. Es schlägt mit folgendem Fehler fehl:

fatal: Not a git repository: . at /usr/share/perl5/Git.pm line 214.

Es gibt jedoch keinen wirklichen Grund, warum Sie sich in einem Repository befinden müssen. Helfer für Anmeldeinformationen sollten auch außerhalb des Repositorys einwandfrei funktionieren können.

Rufen Sie die Nicht-Selbst-Version von auf, config()damit sie git-credential-netrcnicht mehr in einem Repository ausgeführt werden muss.

Jeff King ( peff) fügt hinzu:

Ich gehe davon aus, dass Sie ein gpg-verschlüsseltes verwenden netrc(wenn nicht, sollten Sie wahrscheinlich nur verwenden credential-store).
Für den "schreibgeschützten" Passwortzugriff finde ich die Kombination passmit der folgenden Konfiguration etwas besser:

[credential "https://github.com"]
  username = peff
  helper = "!f() { test $1 = get && echo password=`pass github/oauth`; }; f"

1
versuche das gleiche unter Linux .. git config --local credential.helper "netrc -f /home/me/.netrc.gpg -v -d" ..und ich bekomme "git: 'credential-netrc' ist kein git Befehl. Siehe 'git --help' "
sonnig

4
@sunny Dafür ist das gedacht curl -o c:\prgs\bin\git-credential-netrc https://raw.github.com/git/git/master/contrib/credential/netrc/git-credential-netrc: Sie müssen die git-credential-netrcbeliebige Stelle in Ihrem Pfad ( $PATH) kopieren , damit git ' credential-netrc' aufrufen kann .
VonC

Nun, das _netrchat bei mir auf einem Windows 7PC nicht funktioniert , aber das .netrchat bei youtube-dl mit dem --netrcArgument funktioniert .
Iulian Onofrei

@VonC die aktuelle URL scheint zu sein https://raw.githubusercontent.com/git/git/master/contrib/credential/netrc/git-credential-netrc.perl(Piping in sieben Jahren später 😉)
Gwyneth Llewelyn

1
@ GwynethLlewelyn Danke. Ich habe die Antwort entsprechend bearbeitet. Zögern Sie nicht, es selbst zu bearbeiten, wenn Sie andere veraltete Informationen sehen.
VonC

43

Es gibt eine einfache, altmodische Möglichkeit, Benutzeranmeldeinformationen in einer HTTPS-URL zu speichern:

https://user:password@github.com/...

Sie können die URL mit ändern git remote set-url <remote-repo> <URL>

Der offensichtliche Nachteil dieses Ansatzes ist, dass Sie das Passwort im Klartext speichern müssen. Sie können immer noch einfach den Benutzernamen ( https://user@github.com/...) eingeben, wodurch Sie mindestens die Hälfte des Aufwandes sparen.

Möglicherweise möchten Sie lieber zu SSH wechseln oder die GitHub-Client-Software verwenden.


2
Der Benutzername / das Passwort muss möglicherweise verschlüsselt werden, siehe stackoverflow.com/a/34611311/3906760
MrTux

43

Verwenden Sie einen Anmeldeinformationsspeicher.

Verwenden Sie für Git 2.11+ unter OS X und Linux den in Git integrierten Anmeldeinformationsspeicher :

git config --global credential.helper libsecret

Für msysgit 1.7.9+ unter Windows :

git config --global credential.helper wincred

Für Git 1.7.9+ unter OS X verwenden Sie:

git config --global credential.helper osxkeychain

2
Ich bin sicher, dass dies der git: 'credential-gnome-keyring' is not a git command. See 'git --help'.
richtige

1
Danke, aber ich bekomme irgendwie den gleichen Fehler. Mache ich etwas falsch? Ich tippe den Befehl und nichts passiert. Sobald ich drücke, werde ich nach den Anmeldeinformationen gefragt, die ich erfolgreich eingefügt habe, aber ich erhalte die Fehlermeldung, dass es sich danach nicht mehr um einen Git-Befehl handelt.
Codepleb

2
Bevor libsecret unter Linux funktioniert, müssen Sie die folgenden Schritte ausführen
Lavamantis

1
Eine andere Sache - wenn Sie 2FA auf Github aktiviert haben, funktioniert Ihr Passwort nicht. Sie können jedoch auf Ihrer Github-Seite "Einstellungen" ein persönliches Zugriffstoken erstellen, das als Kennwort fungiert. github.com/github/hub/issues/822
Lavamantis

3
Sicherheitsproblem: Der Windows-Manager für Anmeldeinformationen macht Ihr Klartextkennwort für alle Personen zugänglich, die in Ihrem Windows-Konto angemeldet sind. Sie müssen lediglich eine Anfrage an den Anmeldeinformationsmanager senden, z. B. printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( weitere Details hier ). Sie sollten immer ein persönliches Zugriffstoken verwenden und natürlich 2FA in Ihrem GitHub-Konto verwenden.
cjs

40

Sie können einfach verwenden

git config credential.helper store

Wenn Sie das Kennwort das nächste Mal mit Pull oder Push eingeben, wird es in der Datei .git-credentials als einfacher Text gespeichert (etwas unsicher, aber legen Sie es einfach in einem geschützten Ordner ab).

Und das war's, wie auf dieser Seite angegeben:

git-credential-store


3
Für Git für Windows 2.7.3 (März 2016): github.com/git-for-windows/git/releases?after=v2.8.4.windows.1 wäre das git config credential.helper managerstattdessen
VonC

23

Mir war nicht sofort klar, dass ich zuerst den Helfer herunterladen musste! Ich habe den Download von credential.helper bei Atlassian gefunden. Permanente Authentifizierung bei Git-Repositorys .

Zitat:

Führen Sie die folgenden Schritte aus, wenn Sie Git mit Caching von Anmeldeinformationen unter OS X verwenden möchten:

Laden Sie die binäre git-credential-osxkeychain herunter.

Führen Sie den folgenden Befehl aus, um sicherzustellen, dass die Binärdatei ausführbar ist:

chmod a+x git-credential-osxkeychain

Legen Sie es in das Verzeichnis /usr/local/bin.

Führen Sie den folgenden Befehl aus:

git config --global credential.helper osxkeychain

23

Fügen Sie einfach die Anmeldeinformationen als Teil der URL hinzu:

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

Hinweis: Ich empfehle diese Methode nicht, aber wenn Sie in Eile sind und nichts anderes funktioniert, können Sie diese Methode verwenden.


12
es wird funktionieren, Sie müssen @ mit% 40 in Ihrer E-Mail-ID entkommen
Tarun Gupta

Was ist, wenn die E-Mail-ID ein '+' enthält? Ich habe die gleiche Flucht versucht, aber der Push sagte "Repo nicht gefunden"
Killjoy

4
habe% 2B anstelle von +
Tarun Gupta

Das Speichern von Passwörtern im Klartext und leicht zugänglich ist möglicherweise nicht die optimale Lösung.
Reduzierung der Aktivität

20

Auf einem GNU / Linux-Setup funktioniert ein ~ / .netrc auch ganz gut:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Dies kann davon abhängen, welche Netzwerkbibliotheken Git für den HTTPS- Transport verwendet.


4
Stellen Sie auch sicher chmod 0600 ~/.netrc.
Poolie

Ich möchte hier nur einen Link zur Ubuntu netrc Manpage hinterlassen . Ich musste es für einen anderen Benutzer (/home/git/.netrc) erstellen und dann den Besitzer dieses Benutzers ändern.
Zacharydl

17

Für Windows können Sie das GCM-Plugin ( Git Credential Manager ) verwenden. Es wird derzeit von Microsoft verwaltet. Das Schöne ist, dass das Kennwort im Windows Credential Store gespeichert wird und nicht als einfacher Text.

Auf der Release-Seite des Projekts befindet sich ein Installationsprogramm . Dadurch wird auch die offizielle Version von Git für Windows mit dem integrierten Anmeldeinformations-Manager installiert . Es ermöglicht die Zwei-Faktor-Authentifizierung für GitHub (und andere Server). Und hat eine grafische Oberfläche für die erstmalige Anmeldung.

Für Cygwin-Benutzer (oder Benutzer, die bereits das offizielle Git für Windows verwenden) bevorzugen Sie möglicherweise die manuelle Installation. Laden Sie das Zip-Paket von der Release-Seite herunter . Extrahieren Sie das Paket und führen Sie die install.cmdDatei aus. Dies wird in Ihrem ~/binOrdner installiert . (Stellen Sie sicher, dass sich Ihr ~/binVerzeichnis in Ihrem PFAD befindet.) Konfigurieren Sie es dann mit diesem Befehl:

git config --global credential.helper manager

Git führt dann die git-credential-manager.exeAuthentifizierung bei einem beliebigen Server aus.


3
Jeder, der in Ihrem Konto angemeldet ist, hat einfachen Zugriff auf den Klartext des Passworts. Sie müssen lediglich eine Anfrage an den Anmeldeinformationsmanager senden, z. B. printf "protocol=https\nhost=git.mycompany.com\n" | git credential-manager get( weitere Details hier ). Sie sollten immer ein persönliches Zugriffstoken verwenden und natürlich 2FA in Ihrem GitHub-Konto verwenden.
cjs

13

Wenn Sie Ihr Passwort nicht wie von Mark angegeben im Klartext speichern möchten, können Sie zum Abrufen eine andere GitHub-URL verwenden als zum Pushen. In Ihrer Konfigurationsdatei unter [remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

Beim Push wird weiterhin nach einem Kennwort gefragt, beim Abrufen jedoch nicht, zumindest bei Open Source-Projekten.


12

OAuth

Sie können Ihr eigenes persönliches API-Token ( OAuth ) erstellen und es genauso verwenden, wie Sie Ihre normalen Anmeldeinformationen verwenden würden (at :) /settings/tokens. Zum Beispiel:

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

Eine andere Methode besteht darin, Ihren Benutzer / Ihr Kennwort in zu konfigurieren ~/.netrc ( _netrcunter Windows) , z

machine github.com
login USERNAME
password PASSWORD

Fügen Sie für HTTPS die zusätzliche Zeile hinzu:

protocol https

Ein Helfer für Anmeldeinformationen

Um Ihr GitHub-Passwort bei Verwendung von HTTPS in Git zwischenzuspeichern , können Sie einen Helfer für Anmeldeinformationen verwenden für , um Git anzuweisen, sich bei jeder Kommunikation mit GitHub Ihren GitHub-Benutzernamen und Ihr GitHub-Passwort zu merken.

  • Mac: git config --global credential.helper osxkeychain ( osxkeychain helperist erforderlich),
  • Windows: git config --global credential.helper wincred
  • Linux und andere: git config --global credential.helper cache

Verbunden:


10

Sie können Helfer für Anmeldeinformationen verwenden.

git config --global credential.helper 'cache --timeout=x'

Wo xist die Anzahl der Sekunden?


7
Es ist die Anzahl der Sekunden ... Einige Genies haben es als Millisekunden aktualisiert und jeder hat es genehmigt, ohne es zu überprüfen. Bitte führen Sie keine Leute in die Irre, wenn Sie die Antwort nicht kennen. Vielen Dank!
Charan

Können Sie einen Link zu einem Ort geben store, an dem cacheund andere häufig vorkommende Dinge aufgelistet und erklärt werden?
Notinlist

3
Möchten Sie die Tatsache erwähnen, dass dies Jack Shit ist, es sei denn, Sie rufen einen anderen bestimmten Befehl auf, um zuerst den 'Cache' als Manager zu verwenden? Dieses Zeug ist so kryptisch, all diese Antworten sind unvollständig und keine funktioniert. Unglaublich frustrierend. Siehe dies stattdessen: stackoverflow.com/a/24800870/88409
Triynko

10

Nachdem Sie das Repository geklont haben repo, können Sie die folgende repo/.git/configKonfiguration bearbeiten und hinzufügen:

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

Dann werden Sie nicht gefragt werden usernameund passwordwieder.


Funktioniert für mich mit helper = manager(aber ich werde beim ersten Push nach Benutzername + Repo gefragt).
Stéphane Laurent

mit helper = manager Ich erhalte einen Fehler. Anmeldeinformations-Manager ist kein Git-Befehl
Kapil

Leider ignoriert git das Passwort in der Konfigurationsdatei. .git_credentials mit credential.store ist die einzige Option.
Avamander

9

Ich weiß, dass dies keine sichere Lösung ist, aber manchmal benötigen Sie nur eine einfache Lösung - ohne etwas anderes zu installieren. Und da helper = store bei mir nicht funktioniert hat, habe ich einen Dummy-Helfer erstellt:

Erstellen Sie ein Skript und legen Sie es in den Ordner "bin" Ihres Benutzers, hier " credfake" genannt . Dieses Skript enthält Ihren Benutzernamen und Ihr Passwort:

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

mach es ausführbar:

chmod u+x /home/mahuser/bin/credfake

dann konfiguriere es in git:

git config --global credential.helper /home/mahuser/bin/credfake

(oder verwenden Sie es ohne --global nur für das eine Repo)

und - voilá - git verwendet diesen Benutzer + Passwort.


Genau. Einfache (wenn auch unsichere) Lösung. +1, solange Sie wissen, was Sie tun.
VonC

7

Anstelle des Kontokennworts sollte ein Authentifizierungstoken verwendet werden. Gehen Sie zu GitHub-Einstellungen / -Anwendungen und erstellen Sie ein persönliches Zugriffstoken. Das Token kann genauso verwendet werden wie ein Passwort.

Das Token soll Benutzern ermöglichen, das Kontokennwort nicht für die Projektarbeit zu verwenden. Verwenden Sie das Kennwort nur bei Verwaltungsarbeiten, z. B. beim Erstellen neuer Token oder beim Widerrufen alter Token.


Anstelle eines Tokens oder Kennworts, das einem Benutzer vollständigen Zugriff auf ein GitHub-Konto gewährt, kann ein projektspezifischer Bereitstellungsschlüssel verwendet werden, um den Zugriff auf ein einzelnes Projektrepository zu gewähren. Ein Git-Projekt kann so konfiguriert werden, dass dieser andere Schlüssel in den folgenden Schritten verwendet wird, wenn Sie weiterhin mit Ihren normalen Anmeldeinformationen auf andere Git-Konten oder -Projekte zugreifen können:

  1. Schreiben Sie eine SSH - Konfigurationsdatei , die das enthält Host, IdentityFilefür den Einsatz Schlüssel, vielleicht UserKnownHostsFile, und vielleicht die User(obwohl ich Sie denken , brauchen sie nicht).
  2. Schreiben Sie ein virtuelles SSH-Wrapper-Shell-Skript ssh -F /path/to/your/config $*
  3. Stellen Sie GIT_SSH=/path/to/your/wrappervor Ihrem normalen Git-Befehl voran . Hier muss der git remote(Ursprung) das git@github.com:user/project.gitFormat verwenden.

7

Es ist besser, Anmeldeinformationen für die Sicherheit zu verwenden, aber Sie können sie einige Zeit über den Cache aufbewahren:

git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'

Ihre Anmeldeinformationen werden 3600 Sekunden lang gespeichert.


Es bedeutet, dass wir nach 3600 Sekunden das Passwort erneut eingeben müssen ??? Wie kann man sie dauerhaft speichern?
HoangVu

$ git config credential.helper 'cache --timeout = 3600' Fehler: Konfigurationsdatei konnte nicht gesperrt werden .git / config: Keine solche Datei oder kein solches Verzeichnis
PlantationGator

Dies funktionierte: git config --global credential.helper 'cache --timeout = 3600'
PlantationGator

@Tama Ich weiß, es sind drei Jahre vergangen, aber Sie können einfach weglassen --timeoutund die Anmeldeinformationen werden für immer gespeichert.
Neil Chowdhury

Funktioniert dies in einem Docker-Container (basierend auf windowsservercore)?
Peter Mortensen

5

Bei der Zwei-Faktor-Authentifizierung sieht es etwas anders aus wie ich . Da ich anderswo keine gute Antwort gefunden habe, werde ich eine hier festhalten, damit ich sie später vielleicht finden kann.

Wenn Sie die Zwei-Faktor-Authentifizierung verwenden, funktioniert die Angabe von Benutzername / Passwort nicht einmal - Ihnen wird der Zugriff verweigert. Sie können jedoch ein Anwendungszugriffstoken verwenden und den Anmeldeinformations-Helfer von Git verwenden, um das für Sie zwischenzuspeichern. Hier sind die relevanten Links:

Und ich erinnere mich nicht, wo ich das gesehen habe, aber wenn Sie nach Ihrem Benutzernamen gefragt werden, kleben Sie dort das Anwendungszugriffstoken. Lassen Sie dann das Passwort leer. Es hat auf meinem Mac funktioniert.


Bei Verwendung der bidirektionalen Authentifizierung verwenden Sie das "Zugriffstoken" als Kennwort. Der Benutzername bleibt wie immer
Ben Yitzhaki

4

Das funktioniert bei mir, ich benutze Windows 10

git config --global credential.helper wincred

4

Normalerweise haben Sie eine entfernte URL, so etwas wie

git remote -v

origin    https://gitlab.com/username/Repo.git (fetch)
origin    https://gitlab.com/username/Repo.git (push)

Wenn Sie Benutzername und Passwort während der Verwendung überspringen möchten git push, versuchen Sie Folgendes:

 git remote set-url origin https://username:password@gitlab.com/username/Repo.git

Ich habe gerade dieselbe URL (mit Benutzerdetails einschließlich Passwort) zum Ursprung hinzugefügt.

HINWEIS: Es funktioniert nicht, wenn der Benutzername eine E-Mail-ID ist.

git remote -v

origin    https://username:password@gitlab.com/username/Repo.git (fetch)
origin    https://username:password@gitlab.com/username/Repo.git (push)

3

Ich habe meine Antwort von gitcredentials (7) Manual Page erhalten . In meinem Fall habe ich keinen Anmeldeinformations-Cache in meiner Windows-Installation. Ich benutze Credential-Store.

Nachdem ich den Anmeldeinformationsspeicher verwendet habe, werden der Benutzername / das Kennwort in der Datei [Benutzerordner] / .git-Anmeldeinformationen gespeichert. Um den Benutzernamen / das Passwort zu entfernen, löschen Sie einfach den Inhalt der Datei.


2
Wenn Sie keinen Anmeldeinformations-Cache in Ihren Fenstern haben, würde ich empfehlen, git config --global credential.helper wincreddas Kennwort dauerhaft in diesem Speicher zu speichern.
Chetabahana

2

In der Composer-Dokumentation wird erwähnt, dass Sie verhindern können, dass die GitHub-API verwendet wird, sodass sie wie folgt funktioniert git clone:

Wenn Sie den no-apiSchlüssel für trueein GitHub-Repository festlegen , wird das Repository wie bei jedem anderen Git-Repository geklont, anstatt die GitHub-API zu verwenden. Im Gegensatz zur gitdirekten Verwendung des Treibers versucht Composer jedoch weiterhin, die Zip-Dateien von GitHub zu verwenden.

Der Abschnitt würde also so aussehen:

"repositories": [
    {
        "type": "vcs",
        "no-api": true,
        "url": "https://github.com/your/repo"
    }
],

Beachten Sie, dass die API aus einem bestimmten Grund vorhanden ist. Dies sollte also ein letzter Ausweg in Bezug auf die erhöhte Belastung von github.com sein.


Nicht sicher, was diese Antwort mit der ursprünglichen Frage zu tun hat.
Charles Oppermann

2

Sie bearbeiten auch die bashrc- Datei und fügen ein Skript hinzu.

Dies würde beim Starten von Git einmal nach Ihrem Passwort fragen und es dann speichern, bis Sie sich abmelden.

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi

0

Wenn Sie verwenden osxkeychain ein Token und es abgelaufen ist und es aktualisieren möchte, gehen Sie folgendermaßen vor:

Führen Sie das Terminal aus und drücken Sie zweimal die Eingabetaste.

git credential-osxkeychain erase
 host=github.com
 protocol=https

Jetzt sollten Sie aufgefordert werden, einen Benutzernamen / ein Passwort einzugeben. Manchmal scheint es jedoch so, als würde dies nicht "dauern" und Sie müssen immer wieder neu eintreten.

Wenn ja, starten Sie Ihren Computer neu . Wenn Sie das nächste Mal einen git-Befehl ausführen und Ihren Benutzernamen / Ihr Passwort eingeben, wird dieser gespeichert.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.