Git / GitHub ne peut pas pousser vers le maître

151

Je suis nouveau sur Git / GitHub et j'ai rencontré un problème. J'ai créé un projet de test et l'ai ajouté au référentiel local. Maintenant, j'essaie d'ajouter des fichiers / projet au référentiel distant.

Voici ce que j'ai fait (et cela a fonctionné) -

git remote add origin git://github.com/my_user_name/my_repo.git

Maintenant, lorsque j'essaye de pousser le référentiel vers GitHub, en utilisant la commande suivante, j'obtiens l'erreur suivante -

git push origin master

Erreur -

fatal: remote error:
You can't push to git://github.com/my_user_name/my_repo.git
Use [email protected]:my_user_name/my_repo.git
kapso
la source
Il y a un lien d'aide ( help.github.com ) au bas de toutes les pages github. L'aide décrit de nombreux sujets, dont celui-ci. Je suggérerais de les lire, puis de poser des questions sur des choses spécifiques que vous ne comprenez pas.
jamessan
21
si jamessan avait indiqué un emplacement spécifique dans les pages d'aide, cela aurait été plus utile.
Deonomo
1
duplication possible de git github ne peut pas pousser à l'origine
gion_13

Réponses:

244

GitHub ne prend pas en charge le transfert sur le protocole Git, ce qui est indiqué par votre utilisation du début de l'URL git://. Comme le message d'erreur l'indique, si vous voulez pousser, vous devez utiliser l'URL SSH [email protected]:my_user_name/my_repo.gitou le protocole "HTTP intelligent" en utilisant l' https://URL que GitHub vous montre pour votre référentiel.

(Mise à jour: à ma grande surprise, certaines personnes ont apparemment pensé que par là je suggérais que "https" signifie "HTTP intelligent", ce que je n'étais pas. Git avait un protocole "HTTP stupide" qui ne permettait pas de pousser avant le «HTTP intelligent» utilisé par GitHub a été introduit - soit peut être utilisé sur l'un httpou l' autre https. Les différences entre les protocoles de transfert utilisés par Git sont expliquées dans le lien ci-dessous.)

Si vous souhaitez modifier l'URL d'origine, vous pouvez simplement faire:

git remote set-url origin [email protected]:my_user_name/my_repo.git

ou

git remote set-url origin https://github.com/my_user_name/my_repo.git

Plus d'informations sont disponibles dans 10.6 Git Internals - Transfer Protocols .

Mark Longair
la source
J'ai donc changé l'URL et réessayé le push, obtenez cette erreur maintenant - ERREUR: mon_nom_utilisateur / mon_repo.git n'existe pas. L'avez-vous entré correctement? fatal: l'extrémité distante a raccroché de façon inattendue
kapso
L'URL que vous avez définie est-elle définitivement celle que vous pouvez copier-coller à partir de la page de votre référentiel sur GitHub? (C'est sensible à la casse, d'ailleurs.)
Mark Longair
1
OK, eh bien, vous devez créer le référentiel sur GitHub avant de pouvoir y pousser - lorsque vous le faites, cela vous donnera des instructions sur la façon de cloner ou de pousser vers le référentiel.
Mark Longair
1
J'ai juste eu ce même problème. En fait, le problème était que vous aviez une barre oblique "/" entre github.com et votre nom d'utilisateur. Et ce devrait être un signe deux-points ":". Tel est le problème: D
Wilmer E. Henao
2
@WilmerEHenaoH: cela aurait pu être votre problème, mais ce n'était pas le problème dans la question ou dans ma réponse;) (Juste pour l'intérêt, il y a parfois une confusion sur les deux styles d'URL SSH dans git , dont l'un utilise un deux-points pour séparer le nom d'hôte et le chemin et l'autre non.)
Mark Longair
37

Utilisez la réponse de Mark Longair , mais assurez-vous d'utiliser le lien HTTPS vers le référentiel:

git remote set-url origin https://github.com/my_user_name/my_repo.git

Vous pouvez utiliser alors git push origin master.

Abdo
la source
1
Ça marche pour moi. Ensuite, tapez simplement git pushfonctionne également.
youngzy
13

La solution utilisée par Mark Longair git remote set-url...est assez claire. Vous pouvez également obtenir le même comportement en éditant directement cette section du fichier .git / config:

avant:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = git://github.com/my_user_name/my_repo.git

après:

[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = [email protected]:my_user_name/my_repo.git

(Et inversement, l' git remote set-url...invocation produit le changement ci-dessus.)

Purplejacket
la source
2

Il existe une solution simple à ce problème pour quelqu'un de nouveau:

Modifiez le fichier de configuration dans votre répertoire local .git ( config). Passez git:à https:ci-dessous.

[remote "origin"]
    url = https://github.com/your_username/your_repo
ParamQuery
la source
1
Incorrect, le protocole https n'autorisera pas les push. Voir: livre "Pro Git", section 4.1.4 "Protocole HTTP / S". Lien: git-scm.com/book/en/v2
Kevin
@ KevinJ.Rice: Uhm, où est - il dit que ? Github utilise le protocole HTTP intelligent et qui permet de pousse très bien .
Martijn Pieters
1

J'ai eu ce problème après la mise à niveau du client Git , et soudain, mon dépôt n'a pas pu pousser.

J'ai trouvé qu'une ancienne télécommande avait la mauvaise valeur de url, même à travers ma télécommande actuellement active avait la même valeur urlet fonctionnait bien.

Mais il y avait aussi le pushurlparamètre, donc l'ajouter pour l'ancienne télécommande a fonctionné pour moi:

Avant:

[remote "origin"]
    url = git://github.com/user/repo.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    pushurl = [email protected]:user/repo.git

REMARQUE: cette partie du fichier "config" était inutilisée depuis des lustres, mais le nouveau client s'est plaint de la mauvaise URL:

[remote "composer"]
    url = git://github.com/user/repo.git
    fetch = +refs/heads/*:refs/remotes/composer/*

J'ai donc ajouté le pushurlparamètre à l'ancienne télécommande:

[remote "composer"]
    url = git://github.com/user/repo.git
    fetch = +refs/heads/*:refs/remotes/composer/*
    pushurl = [email protected]:user/repo.git
Peter Mortensen
la source
1

Cette erreur se produit lorsque vous clonez un dépôt à l'aide d'un appel comme:

git clone git://github.com/....git

Cela vous définit essentiellement comme un utilisateur pull-only, qui ne peut pas pousser les changements.

J'ai corrigé cela en ouvrant le .git/configfichier de mon dépôt et en modifiant la ligne:

[remote "origin"]
    url = git://github.com/myusername/myrepo.git

à:

[remote "origin"]
    url = ssh+git://[email protected]/myusername/myrepo.git

Ce ssh+gitprotocole avec l' gitutilisateur est le mécanisme d'authentification préféré par Github.

Les autres réponses mentionnées ici fonctionnent techniquement, mais elles semblent toutes contourner ssh, vous obligeant à entrer manuellement un mot de passe, ce que vous ne voulez probablement pas.

Cerin
la source
0

J'ai ajouté ma pubkey à github.com et cela a réussi:

ssh -T [email protected]

Mais j'ai reçu l'erreur "Vous ne pouvez pas pousser" après avoir mal fait ceci:

git clone git://github.com/mygithubacct/dotfiles.git
git remote add origin [email protected]:mygithubacct/dotfiles.git
...edit/add/commit
git push origin master

Au lieu de faire ce que j'aurais dû faire:

mkdir dotfiles
cd dotfiles
git init
git remote add origin [email protected]:mygithubacct/dotfiles.git
git pull origin master
...edit/add/commit
git push origin master
rshdev
la source
0

Pour définir httpsglobalement au lieu de git://:

git config --global url.https://github.com/.insteadOf git://github.com/
tokhi
la source
0

Les cmnds ci-dessous résoudront le problème.

 git pull --rebase
 git push
Hariharan AR
la source
-1

Le moyen le plus rapide de surmonter cela est de le remplacer originpar la suggestion qu'il donne.

Au lieu de git push origin master, utilisez:

git push [email protected]:my_user_name/my_repo.git master
Tiberiu Craciun
la source