Comment puis-je pousser vers ma fourchette à partir d'un clone du dépôt d'origine?

124

J'ai créé un fork (appelons-le myrepo) d'un autre référentiel (appelons-le orirepo) sur GitHub. Plus tard, j'ai cloné orirepo.

git clone https://github.com/original/orirepo.git

J'ai modifié environ 20 fichiers, puis j'ai mis en scène ma modification et effectué un commit

git add
git commit

Cependant, quand j'ai essayé de pousser

git push

J'ai eu cette erreur:

remote: Permission to original/orirepo.git denied to mylogin.
fatal: unable to access 'https://github.com/original/orirepo.git/': The requested URL returned error: 403

Je sais que j'ai fait une erreur: j'aurais dû cloner ma fourche plutôt que orirepo, mais il est trop tard pour cela maintenant. Comment pourrais-je pousser vers mon fork plutôt que vers origin/orirepo, auquel je n'ai pas accès en écriture?

Rémi Becheras
la source

Réponses:

188

Par défaut, lorsque vous clonez un référentiel

  • qui réside à https://github.com/original/orirepo.git,
  • dont la branche courante est appelée master,

puis

  • la configuration locale du clone résultant ne répertorie qu'une seule télécommande appelée origin, qui est associée à l'URL du référentiel que vous avez cloné;
  • la masterbranche locale de votre clone est configurée pour suivre origin/master .

Par conséquent, si vous ne modifiez pas la configuration de votre clone, Git interprète

git push

comme

git push origin master:origin/master

En d'autres termes, git pushtente de pousser votre masterbranche locale vers la masterbranche qui réside sur le référentiel distant (connu par votre clone commeorigin ). Cependant, vous n'êtes pas autorisé à le faire, car vous ne disposez pas d'un accès en écriture à ce référentiel distant.

Tu dois

  1. soit redéfinissez la origintélécommande à associer à votre fork, en exécutant

    git remote set-url origin https://github.com/RemiB/myrepo.git
    
  2. ou, si vous souhaitez conserver la définition d'origine de la origintélécommande, définissez une nouvelle télécommande (appelée myrepo, ici) qui est associée à votre fork:

    git remote add myrepo https://github.com/RemiB/myrepo.git
    

    Ensuite, vous devriez pouvoir pousser votre masterbranche locale à votre fourchette en exécutant

    git push myrepo master
    

    Et si vous voulez dire à Git qui git pushdevrait pousser vers myrepoplutôt qu'à originpartir de maintenant, vous devriez exécuter

    git push -u myrepo master
    

au lieu.

jub0bs
la source
«git push -u» changera-t-il également le comportement par défaut de «git pull»?
benroth
1
Oui, c'est le cas, donc au lieu de faire "push -u", vous devriez utiliser l'option pushDefault: git config --add remote.origin.pushdefault myrepo et cela n'affectera que le push, et s'appliquera à toutes les nouvelles branches existantes.
Marius K
1
Fait git remote set-url origin http://github.com/myname/reponameet puis git push origin mybranch. Travaillé! Je vous remercie!
Développeur Marius Žilėnas
1
Si ajouter une télécommande est utilisé, comment cela affecte-t-il pull? D'où vient-il? Comment gère-t-il la future fusion entre les 2 dépôts?
Kok How Teh
1
@KokHowTeh L'ajout d'une autre télécommande n'affecte pas la branche distante (le cas échéant) qu'une branche locale suit. Cependant, git push -u myrepo mastervotre maître local commence le suivi myrepo/master. Si, après cela, vous exécutez git pullpendant que vous êtes sur master, vous tirerez de myrepo, et non plus de origin.
jub0bs
18

Ainsi, vous avez cloné le repo de quelqu'un, vous avez apporté les modifications, puis vous vous êtes rendu compte que vous ne pouvez pas pousser vers ce repo, mais vous pouvez pousser vers votre propre fourchette. Donc, vous êtes allé de l'avant et avez fourché le repo d'origine.

Tout ce que vous avez à faire est d'échanger l'URL d'origine de votre clone local avec l'URL de votre dépôt forké.

Fais-le comme ça

git remote set-url origin https://github.com/fork/name.git

https://github.com/fork/name.gitest l'URL de votre fork du repo d'origine.

Après ça, juste

git push

et vous pourrez appliquer vos modifications à votre fork :)

Ahmad Awais
la source
a fonctionné comme un charme, merci!
Rafael Ruales
7

D'accord, j'ai finalement édité mon fichier de configuration git:

$ nano .git/config

en changeant :

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/<origin-project>/<origin-repo>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

à

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
[remote "origin"]
        url = https://github.com/<mylogin>/<myrepo>.git
        fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
        remote = origin
        merge = refs/heads/master

Ensuite,

$ git push

A fonctionné comme un charme.

Ou, grâce à la réponse de Thiago F Macedo :

git remote set-url origin https://[email protected]/user/repo.git
Rémi Becheras
la source
-5

Vous devez d'abord cloner le dépôt fourchu dans votre compte.

git clone https://github.com/your_account/repo.git

Vous avez absolument les autorisations pour pousser vers ce dépôt. Si vous souhaitez pousser votre code vers le dépôt d'origine, vous pouvez émettre une demande d'extraction.

LéonF
la source
Ils ne demandent pas de cloner la fourche. Veuillez relire la question.
Ahmad Awais