Nom d'utilisateur et mot de passe dans la commande pour git push

107

Il est possible de cloner un référentiel git, en spécifiant le nom d'utilisateur et le mot de passe dans la commande. Exemple:

git clone https://username:[email protected]/file.git

Est-il possible de spécifier également le nom d'utilisateur et le mot de passe lors du push? Ainsi, par exemple, en cours d'exécution git push origin --allaffichera alors une demande de mot de passe. Je veux cela en une seule commande.

(Je suis conscient de la possibilité de configurer des clés et d'autres solutions, mais je veux savoir s'il existe un moyen de continuer à utiliser le nom d'utilisateur et le mot de passe avec une seule commande.) J'exécute Git Bash sur Windows 8.1.

Jake
la source
Trouvez-vous une solution pour git commit?
Nam Vu

Réponses:

157

Oui, tu peux faire

git push https://username:[email protected]/file.git --all

dans ce cas, https://username:[email protected]/file.gitremplacez le originingit push origin --all

Pour voir plus d'options pour git push, essayezgit help push

numéro 5
la source
13
Notez que cela stockera le nom d'utilisateur et le mot de passe en texte brut dans la configuration git.
poke le
4
au lieu d'un mot de passe simple, vous pouvez utiliser le hachage de mot de passe
Vasiliy Vanchuk
1
@VasiliyVanchuk Quel type de hash utilisez-vous? Cela fonctionne-t-il pour Github?
Raphi
14
que se passe-t-il si le mot de passe contient @?
Rahul Sharma
1
Il est recommandé de joindre le chemin complet avec ' ', par exemple:git push 'https://username:[email protected]/file.git'
AlikElzin-kilaka
27

J'ai utilisé le format ci-dessous

git push https://username:[email protected]/file.git --all

et si votre mot de passe ou nom d'utilisateur contient @ remplacez-le par% 40

Hamidreza
la source
Vous pouvez même utiliser WebUtility.UrlEncode (mot de passe) pour obtenir ce% 40
iPradeep
pour les utilisateurs de php, cela urlencode($password)encodera non seulement tous les caractères spéciaux @.
shyammakwana.me
3

Selon la documentation Git , le dernier argument de la git pushcommande peut être le référentiel vers lequel vous souhaitez pousser:

    git push [--all | --mirror | --tags] [-n | --dry-run] [--receive-pack=<git-receive-pack>]
             [--repo=<repository>] [-f | --force] [--prune] [-v | --verbose] [-u | --set-upstream]
             [<repository> [<refspec>…]]

Et le repositoryparamètre peut être une URL ou un nom distant.

Vous pouvez donc spécifier le nom d'utilisateur et le mot de passe de la même manière que vous le faites dans votre exemple de clonecommande.

Alexey Orlenko
la source
2
Cela semble approprié, mais lorsque j'ajoute le repo git avec le nom d'utilisateur et le mot de passe comme argument, comme exemple, il demande toujours le mot de passe.
Jake
3

Git ne stockera pas le mot de passe lorsque vous utilisez des URL comme ça. Au lieu de cela, il ne stockera que le nom d'utilisateur, il n'a donc qu'à vous demander le mot de passe la prochaine fois. Comme expliqué dans le manuel , pour stocker le mot de passe, vous devez utiliser un assistant d'identification externe . Pour Windows, vous pouvez utiliser le magasin d'informations d'identification Windows pour Git . Cet assistant est également inclus par défaut dans GitHub pour Windows .

Lors de son utilisation, votre mot de passe sera automatiquement mémorisé, vous n'aurez donc à le saisir qu'une seule fois. Ainsi, lorsque vous clonez, votre mot de passe vous sera demandé, puis chaque nouvelle communication avec la télécommande ne vous demandera plus votre mot de passe. Au lieu de cela, l'assistant d'informations d'identification fournira à Git l'authentification.

Cela ne fonctionne bien sûr que pour l'authentification via https; pour ssh access ( [email protected]/repository.git), vous utilisez des clés SSH et celles dont vous vous souvenez ssh-agent(ou le concours de PuTTY si vous utilisez plink).

poussée
la source
4
"Je suis conscient de la possibilité de configurer des clés et d'autres solutions, mais je veux savoir s'il existe un moyen de continuer à utiliser le nom d'utilisateur et le mot de passe avec une seule commande."
Marvin
@Marvin Je suis au courant de cette remarque, mais je ne voulais pas simplement soumettre une réponse en deux phrases, j'ai donc inclus des informations pour d'autres utilisateurs qui ne seraient peut-être pas simplement intéressés par la connexion via HTTPS.
poke le
4
Cela ne répond toujours pas à sa question, cependant.
Marvin
3

C'est possible mais, avant git 2.9.3 (août 2016), a git pushafficherait l'URL complète utilisée lors du repoussage vers le repo cloné.
Cela inclurait votre nom d'utilisateur et votre mot de passe!

Mais pas plus: voir commit 68f3c07 (20 juillet 2016) et commit 882d49c (14 juillet 2016) par Jeff King ( peff) .
(Merged by Junio ​​C Hamano - gitster- in commit 71076e1 , 08 août 2016)

push: anonymiser l'URL dans la sortie d'état

Commit 47abd85 (fetch: Supprimez les noms d'utilisateur des URL avant de les stocker, 17/04/2009, Git 1.6.4) a appris à récupérer pour anonymiser les URL.
Le but principal était d'éviter de coller des mots de passe dans les messages de fusion-validation, mais comme effet secondaire, nous évitons également de les imprimer sur stderr.

Le côté push n'a pas le problème de fusion-commit, mais il devrait probablement éviter de les imprimer sur stderr . Nous pouvons réutiliser la même fonction d'anonymisation.

Notez que pour que cela se produise, les informations d'identification devraient apparaître soit sur la ligne de commande, soit dans un fichier de configuration git, dont aucun n'est particulièrement sécurisé.
Les gens devraient donc utiliser des assistants d'identification à la place, ce qui fait disparaître ce problème.

Mais ce n'est pas une excuse pour ne pas améliorer la situation des personnes qui, pour une raison quelconque, finissent par utiliser des informations d'identification intégrées dans l'URL.

VonC
la source
2

Pour toute personne ayant des problèmes avec les mots de passe avec des caractères spéciaux, omettez simplement le mot de passe et il vous le demandera:

git push https://[email protected]/YOUR_GIT_USERNAME/yourGitFileName.git
Chris Adams
la source
Il semble que votre réponse soit la seule sur tout le Web à indiquer clairement comment ne donner que le nom d'utilisateur.
shuhalo