web-dev-qa-db-fra.com

Comment puis-je pousser à la fourche à partir d'un clone du référentiel d'origine?

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 mes modifications et fait 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 commis une erreur: j'aurais dû cloner ma fourchette plutôt que orirepo, mais il est trop tard pour le moment. Comment pourrais-je pousser à ma fourche plutôt que de Origin/orirepo, auquel je n'ai pas accès en écriture?

99
Rémi Becheras

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

  • qui réside à https://github.com/original/orirepo.git,
  • dont la branche actuelle s'appelle master,

ensuite

  • la configuration locale du clone résultant ne répertorie qu'une seule personne distante appelée Origin, qui est associée à l'URL du référentiel que vous avez cloné;
  • la branche locale master de votre clone est définie sur trackOrigin/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 Push tente de pousser votre branche locale master vers la branche master qui se trouve sur le référentiel distant (connu par votre clone sous le nom de Origin). Cependant, vous n'êtes pas autorisé à le faire, car vous n'avez pas d'accès en écriture à ce référentiel distant.

Tu dois

  1. soit redéfinir la télécommande Origin à associer à votre fork, en lançant

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

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

    Ensuite, vous devriez pouvoir pousser votre branche locale master sur votre fork en lançant

    git Push myrepo master
    

    Et si vous voulez dire à Git que git Push devrait pousser vers myrepo au lieu de Origin à partir de maintenant, vous devriez lancer

    git Push -u myrepo master
    

au lieu.

157
jub0bs

Ainsi, vous avez cloné le repo de quelqu'un qui a apporté les modifications et ensuite réalisé que vous ne pouvez pas accéder à ce dépôt, mais que vous pouvez utiliser ce que vous souhaitez. Alors, vous êtes allé de l'avant et avez inséré le rapport initial.

Il vous suffit d'échanger l'URL d'origine dans votre clone local avec l'URL de votre référentiel forké.

Fais-le comme ça

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

https://github.com/fork/name.git est l'URL de votre fork provenant du référentiel d'origine.

Après cela, juste

git Push

et vous pourrez appliquer vos modifications à votre fork :)

13
Ahmad Awais

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

Travaillé comme un charme.

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

git remote set-url Origin https://[email protected]/user/repo.git
7
Rémi Becheras