Git demande un nom d'utilisateur à chaque fois que je pousse

676

Chaque fois que j'essaie de pousser dans mon repo, git demande les deux username & password.

Je n'ai aucun problème à ressaisir mon mot de passe à chaque fois mais le problème vient de la saisie du nom d'utilisateur. J'utilise httpspour cloner mon référentiel.

Alors, comment puis-je configurer git pour qu'il ne demande pas usernameà chacun git push.

Je suis nouveau sur Linux mais l'IICR sous Windows git pushne demande que le mot de passe.

RanRag
la source
1
Question connexe: stackoverflow.com/questions/2233590/…
Wug
@Wug: Mais je ne veux pas stocker de mot de passe. Je souhaite uniquement enregistrer le nom d'utilisateur.
RanRag
4
essayez de suivre ces instructions et d'omettre la ligne de mot de passe.
Wug
2
doublon possible de Y a
dk14
il y a aussi une réponse sur superutilisateur à votre question initiale - superuser.com/questions/847181/…
dk14

Réponses:

975

Modifier (par @ dk14 comme suggéré par les modérateurs et les commentaires)

AVERTISSEMENT: si vous utilisez credential.helper storela réponse, votre mot de passe sera stocké complètement non chiffré ("tel quel") sur ~/.git-credentials. Veuillez consulter la section des commentaires ci-dessous ou les réponses de la section "Lié", surtout si votre employeur a une tolérance zéro pour les problèmes de sécurité.

Même s'il est accepté, il ne répond pas à la question du PO sur l'omission d'un nom d'utilisateur uniquement (pas d'un mot de passe). Pour les lecteurs ayant ce problème précis, la réponse de @ grawity pourrait être utile.


Réponse originale (par @Alexander Zhu):

Vous pouvez stocker vos informations d'identification à l'aide de la commande suivante

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

Je vous suggère également de lire
$ git help credentials

Alexander Zhugastrov
la source
161
Attention, il n'y a pas de sécurité dans cette méthode. Votre mot de passe est stocké sous forme de texte brut.
Mark Lakata
13
vous pouvez trouver de meilleures façons d'assurer la sécurité ici - stackoverflow.com/a/28104587/1809978
dk14
4
@MarkLakata - Veuillez me dire comment je peux annuler la commande dans cette réponse? Après l'avoir annulée, j'utiliserai une méthode sécurisée pour stocker les informations d'identification.
MasterJoe2
25
@ testerjoe2 trygit config --unset credential.helper
dk14
1
N'oubliez pas de définir le délai d'expiration, la valeur par défaut est de 15 minutes - Définissez la valeur sur 30 millions pour avoir environ 1 an. Trouvé ici: stackoverflow.com/a/35942890/1579667
Benj
181

Vous pouvez accomplir cela dans le .git/configfichier de votre référentiel local. Ce fichier contient une section intitulée «distant» avec une entrée appelée «url». L'entrée «url» devrait contenir le lien https du référentiel dont vous parlez.

Lorsque vous préfixez l'hôte «url» avec votre nom d'utilisateur, gitvous ne devriez plus demander votre nom d'utilisateur. Voici un exemple:

url = https://[email protected]
MERose
la source
5
Si vous utilisez des caractères spéciaux dans votre nom d'utilisateur ou pw, vous devez les échapper. Voir en.wikipedia.org/wiki/Percent-escape pour les bons caractères d'échappement. par exemple, "! @ #" [sans les guillemets] serait remplacé par "% 21% 40% 23". Voir aussi la réponse "Daniel Lerch" ci
ns du
1
Les autres personnes travaillant sur le même référentiel verront-elles mon nom d'utilisateur?
CodyBugstein
17
Cela devrait être la bonne réponse à la question du PO, à savoir "comment conserver le nom d'utilisateur, PAS le mot de passe". Non seulement cette réponse est la bonne façon de conserver le nom d'utilisateur, mais elle évite également le risque de sécurité possible git config credential.helper store.
RayLuo
Je suis reconnaissant pour cette réponse et j'ai essayé de cette façon, mais il me demande toujours à chaque fois (v 2.1.4) - a essayé le remoteurl avec [email protected] ET name%[email protected] - il demande toujoursusername for https://gitlab.com:
eli
1
J'ai essayé et j'ai obtenuunable to access 'https://<me>@bitbucket.org:<x>/<y>.git/': Illegal port number
Ian Grainger
118

Authentification permanente avec les référentiels Git

Exécutez la commande suivante pour activer la mise en cache des informations d'identification:

$ git config credential.helper store
$ git push https://github.com/repo.git

Username for 'https://github.com': <USERNAME>
Password for 'https://[email protected]': <PASSWORD>

L'utilisation doit également spécifier l' expiration de la mise en cache

git config --global credential.helper "cache --timeout 7200"

Après avoir activé la mise en cache des informations d'identification, il sera mis en cache pendant 7200 secondes (2 heures) .


Lire les documents d' identification

$ git help credentials
Jay Patel
la source
J'ai défini le délai d'expiration à 7200. Mais j'ai pensé à le définir à 5 pour les tests. Je l'ai donc mis à 5, mais quand j'ai essayé de pousser à nouveau après 30 secondes, mais on ne m'a pas demandé de nom d'utilisateur ou de mot de passe.
Buttle Butkus
Peut-être que vos informations d'identification ne sont pas stockées dans le monde.
Jay Patel
En ce qui concerne la sécurité, il convient de consulter les documents: "Cette commande met en cache les informations d'identification en mémoire pour une utilisation par les futurs programmes Git. Les informations d'identification stockées ne touchent jamais le disque et sont oubliées après un délai configurable." git-scm.com/docs/git-credential-cache
mloskot
2
n'est-ce pas la git config credntial.helper storecommande dangereuse, qui est chargée de stocker les informations d'identification en clair dans le fichier ~ / .git-credentials? Je pense (et d'après mon expérience) que la commande ... cache ...- est suffisante: git config --clogal credential.helper 'cache --timeout 7200'elle crée le ~/.git-credential-cacherépertoire : avec le fichier cache dedans Donc, exécutez simplement cette commande et PAS la commande "... store"
eli
Ça n'a pas marché pour moi. Toujours à la recherche d'un mot de passe à chaque fois
Ian Grainger
75

Ajoutez de nouvelles clés SSH comme décrit dans cet article sur GitHub .

Si Git vous demande toujours le nom d' utilisateur et mot de passe, essayez de changer https://github.com/de [email protected]:dans l' URL à distance:

$ git config remote.origin.url 
https://github.com/dir/repo.git

$ git config remote.origin.url "[email protected]:dir/repo.git"
Lukasz Czerwinski
la source
19
Cela devrait être la bonne réponse! L'enregistrement de vos informations d'identification est incroyablement non sécurisé. Si j'ai une clé SSH en place, cela me demande mes informations d'identification uniquement parce que je n'ai pas l'URL correcte comme indiqué ici.
Alexis Wilke
2
ou vous pouvez utilisergit config remote.origin.url "ssh://git@yourRepoHost/yourRepoName.git"
ndarkness
1
git config remote.origin.url [email protected]: adammajewski / ray-backward-iteration.git
Adam
1
Merci, c'est la réponse que je cherchais.
Yupeng Tang
50

Le moyen le plus simple que j'ai trouvé était avec cette commande:

git config --global credential.https://github.com.username <your_username>

Cela fonctionne site par site et modifie votre configuration git globale.

Pour voir les changements, utilisez:

git config --global --edit
Ben
la source
1
Pour une raison quelconque, c'était la seule méthode qui fonctionnait pour moi. Merci!
mathetes
cette méthode est-elle sécurisée? le mot de passe github est-il uniquement stocké sur l'ordinateur local et non poussé vers github?
Akin Hwan
Je ne sais pas pourquoi ce n'est pas la réponse approuvée, la commande fonctionne parfaitement et répond pleinement et uniquement à la question: stocker le nom d'utilisateur, pas le mot de passe. Merci Ben!
AmaelH
Vous pouvez également exécuter: [git config --global credential.helper 'cache --timeout = 3600'] Ainsi, votre mot de passe sera enregistré pendant une heure à chaque fois
obenda le
31

Si vous utilisez https au lieu de ssh, vous pouvez modifier "url" .git/configcomme le dit user701648, mais si vous le souhaitez, vous pouvez également ajouter le mot de passe:

url = https://username:[email protected]
Daniel Lerch
la source
1
Que faire s'il est @inclus dans mon mot de passe? url = https://username:abc@[email protected]Ça me donne une erreurCould not resolve host: @[email protected]
Rahul Mankar
La usernamepartie semble être ignorée, lorsque le serveur redirige (comme de FOO vers FOO.git).
Mikhail T.
22

Vous pouvez définir votre nom d'utilisateur pour tous les référentiels d'un site donné en mettant quelque chose comme ce qui suit dans votre fichier de configuration Git. Vous souhaiterez remplacer " https://example.com " et "moi" par l'URL réelle et votre nom d'utilisateur réel.

[credential "https://example.com"]
    username = me

(Ceci est directement à partir des "informations d'identification de l'aide git")

Alan De Smet
la source
16

Changer le repo cloné fonctionne:

git remote set-url origin [email protected]:gitusername/projectname.git

L'utilisation des informations d'identification mises en cache fonctionne et la définition du délai d'expiration rend les choses moins ennuyeuses. Si vous utilisez l'assistant d'informations d'identification Windows, cela devrait être la méthode la plus simple (surtout si SSH est bloqué).

Layer8Err
la source
Ceci est une bonne réponse pour GitHub (que la question pose spécifiquement ... (je ne sais pas pourquoi vous avez voté contre)
Tim Groeneveld
12

Assurez-vous que vous utilisez SSH au lieu de http. Vérifiez cette réponse SO.

gkris
la source
3
Mais j'ai dû utiliser httpcar dans mon université sshest bloqué par le département sys-admin.
RanRag
Alors peut-être que ce lien vous aidera.
gkris
Il y a une page d'aide officielle de GitHub à ce sujet maintenant. Ce qui m'est arrivé, c'est que j'ai cloné l'un de mes propres référentiels avant de me connecter, donc il ne m'a pas reconnu et par défaut en HTTPS je crois. help.github.com/articles/changing-a-remote-s-url
anon58192932
12

git config --global credential.helper cache

Kai Wang
la source
1
C'est une meilleure réponse sous Linux.
Larry
9

En plus de la réponse de user701648, vous pouvez stocker vos informations d'identification dans votre dossier de départ (global pour tous les projets), au lieu du dossier de projet à l'aide de la commande suivante

$ git config --global credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>
Yuvi
la source
9

Quand je ne fais que git pull , git pull origin xxx , git demande à la fois le nom d'utilisateur et le mot de passe.

git config credential.helper store

Ça marche.

Languoguang
la source
9

Le moyen le plus simple consiste à créer un ~/.netrcfichier avec le contenu suivant:

machine github.com
login YOUR_GITHUB_USERNAME
password YOUR_GITHUB_PASSWORD

(comme indiqué ici: https://gist.github.com/ahoward/2885020 )

Vous pouvez même fermer les autorisations sur ce fichier afin que personne ne puisse lire votre mot de passe en tapant:

chmod 600 ~/.netrc
Plus simple
la source
6

Si vous utilisez la version SSH , vous n'aurez aucun problème avec les mots de passe.Une seule fois vous générez une clé SSH , pour dire à git, que ce pc fonctionnera avec ce compte github et ne me demandera plus jamais aucun accès (pour ce pc).

Comment générer SSH pour Github

Hazarapet Tunanyan
la source
4

Pour éviter d'entrer le nom d'utilisateur, mais toujours être invité à entrer un mot de passe, vous pouvez simplement cloner votre référentiel, y compris le nom d'utilisateur:

git clone [email protected]/my_repo.git
ManoDestra
la source
3
  1. $ git config credential.helper store

  2. $ git push / push https://github.com/xxx.git

  3. Saisissez ensuite votre nom d'utilisateur et votre mot de passe.

  4. Terminé
Stephen Tun Aung
la source
Ce ne git push/push https://github.com/xxx.gitdevrait pas être le casgit push https://github.com/xxx.git
Mohsin
3

ssh+ key authenticationest un moyen plus fiable que https+credential.helper

Vous pouvez configurer pour utiliser SSH au lieu de HTTPS pour tous les référentiels comme suit:

git config --global url.ssh://[email protected]/.insteadOf https://github.com/

url.<base>.insteadOfest documenté ici .

Akif
la source
2

Méthode rapide

récupérez l'url de votre git lorsque vous travaillez dans le répertoire de travail:

git config remote.origin.url

puis :

git config credential.helper store

git push "url of your git"

demandera le nom d'utilisateur et le mot de passe une dernière fois

terminé.

Aominé
la source
1

Vous pouvez simplement courir

git config --global credential.helper wincred

après l'installation et la connexion à GIT pour Windows dans votre système.

cyperpunk
la source
Je ne vois pas le mot linux dans la requête. Mon mauvais
cyperpunk
1

(Uniquement pour Mac OS)

pour Windows et Linux veuillez vous référer au lien de documentation de Github mentionné ci-dessous.

Depuis la documentation Github: Lien vers la documentation

Mettre en cache votre mot de passe GitHub dans Git

  • Vous avez besoin de Git 1.7.10 ou d'une version plus récente pour utiliser l'assistant d'informations d'identification osxkeychain.

    pour vérifier votre version de Git: git --version

  • pour découvrir que l' osxkeychain helper est déjà installé:

    git credential-osxkeychain

    si vous obtenez la réponse suivante, vous l'avez déjà installée et prête à l'emploi sur votre mac:

    > Usage: git credential-osxkeychain <get|store|erase>

    si vous n'obtenez pas de réponse comme indiqué ci-dessus, vous pouvez l'installer en exécutant la commande suivante:

    git credential-osxkeychain

  • pour dire à git d'utiliser globalement osxkeychain pour les informations d'identification git:

    git config --global credential.helper osxkeychain

    Il vous demandera une fois avant d'enregistrer les informations d'identification dans le trousseau .

Akash Gandhi
la source