Un projet peut-il avoir plusieurs origines?


188

Un projet peut-il avoir deux (ou plus) «origines» dans Git?

Je voudrais pousser un seul projet à la fois sur github et sur un serveur Heroku .

Plus précisément, cette erreur apparaît lors de l'ajout du référentiel github:

$ git remote add origin https://github.com/Company_Name/repository_name.git
fatal: remote origin already exists.

8
Vous pouvez avoir autant de référentiels distants que vous le souhaitez, mais vous devez leur donner des noms différents.
Felix Kling

Le nom du référentiel est différent dans ce cas. Le mot «origine» est-il un nom qui peut être changé?
Chris Dutrow

4
Oui, git remote rename <old> <new>: linux.die.net/man/1/git-remote . Mais vous pouvez également nommer le référentiel Github différemment ...
Felix Kling


Et est-il possible de faire de l'une des télécommandes la télécommande par défaut pour ne pas me demander d'écrire explicitement le nom de cette télécommande à chaque fois que je pousse?
40détectives

Réponses:


276

Vous pouvez avoir autant de télécommandes que vous le souhaitez, mais vous ne pouvez avoir qu'une seule télécommande nommée «origine». La télécommande appelée "origin" n'est en aucun cas spéciale, sauf que c'est la télécommande par défaut créée par Git lorsque vous clonez un référentiel existant. Vous pouvez configurer une deuxième télécommande, pousser vers / tirer depuis cette télécommande et configurer certaines branches pour suivre les branches de cette télécommande au lieu de l'origine.

Essayez plutôt d'ajouter une télécommande appelée "github":

$ git remote add github https://github.com/Company_Name/repository_name.git

# push master to github
$ git push github master

# Push my-branch to github and set it to track github/my-branch
$ git push -u github my-branch

# Make some existing branch track github instead of origin
$ git branch --set-upstream other-branch github/other-branch

4
Comme indiqué par la réponse avec les votes les plus élevés pour la question que celle-ci duplique éventuellement - une télécommande peut faire référence à plusieurs référentiels. Par conséquent, vous pouvez pousser vers une télécommande et mettre à jour deux ou plusieurs référentiels, sans savoir si c'est le but du PO.
AD7six

Mais quels sont quelques exemples pratiques des raisons pour lesquelles vous voudriez faire cela? Pourquoi auriez-vous un répertoire pointé vers plusieurs dépôts? Chaque référentiel a généralement son propre
répertoire

4
@mightyspaj Presque tous ceux qui déploient sur Heroku ont une télécommande appelée originet une télécommande appelée heroku.
meagar

@mightyspaj, Ou si votre équipe utilise des fourches et que vous souhaitez parfois y accéder. Nous faisons cela dans notre équipe travaillant avec des équipes dans différents UTC afin que lorsque nous approuvons les PR, nous pouvons rebase / push en utilisant leur fork et sommes en mesure de fusionner le code maintenant, pas demain).
Benoit Drapeau

Existe-t-il un moyen de pousser toutes les succursales locales à la fois vers la nouvelle télécommande?
Tanasis

89

En guise de remarque pour quiconque tombe sur cette question plus tard, il est possible que l'origine soit poussée vers plus d'un serveur de référentiel git à la fois.

Vous pouvez y parvenir en utilisant la commande suivante pour ajouter une autre URL à la télécommande d'origine.

git remote set-url --add origin ssh://git@bitbucket.org/user/myproject.git

8
Pour plus de réflexions à ce sujet, consultez cette question .
moi

3
Ok, alors comment supprimer l'une de ces origines sans les supprimer toutes?
Michael

@Michael Vous pouvez modifier le ./git/configfichier et supprimer le fichier url dans la section [remote "origin"]
Pini Cheyni

8
@Michaelgit remote set-url --delete origin ssh://git@bitbucket.org/user/myproject.git
Afrig Aminuddin

Toutes les télécommandes doivent-elles avoir le même historique de validation? Que faire si je veux pousser certains commits sur une télécommande et pas sur l'autre
Qasim

44

Voici un exemple de projet avec plusieurs télécommandes, GitHub et GitLab:

  1. Ajouter un dépôt distant pour GitHub

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. Ajouter un dépôt distant pour GitLab

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. Vous avez maintenant plusieurs télécommandes dans le projet. Vérifiez avecgit remote -v

    $ git remote -v
    github https://github.com/Company_Name/repository_name.git (fetch)
    github https://github.com/Company_Name/repository_name.git (push)
    gitlab https://gitlab.com/Company_Name/repository_name.git (fetch)
    gitlab https://gitlab.com/Company_Name/repository_name.git (push)
    
  4. Comment poussez-vous vers plusieurs référentiels?

    $ git push github && git push gitlab
    

2
Ne va pas simplement $ git pushpousser à toutes les télécommandes?
Refroidisseur d'eau v2

Nous avons un problème lorsque j'essaye de pousser github puis de pousser automatiquement vers gitlab. Pouvez vous me donner un coup de main ? Je veux pousser une par une origine.
Mitul Marsoniya

comment puis-je travailler avec ça si j'ai deux projets dans gitlab, deux référentiels. j'obtiens le code d'un projet puis le pousse vers l'autre projet?
muzi jack

2

vous pouvez ajouter un autre compte distant à votre référentiel en donnant un nom différent au lieu de l'origine. Vous pouvez utiliser un nom tel que origin2. ainsi votre commande git peut être modifiée comme

git remote add origin2 https://github.com/Company_Name/repository_name.git

1
git remote add origin2 https://github.com/Company_Name/repository_name.git

et pour une utilisation push:

git push -u origin2 master

1
git remote set-url --add --push origin git@github.com:user/my-project.git
git remote set-url --add --push origin git@bitbucket.org:user/my-project.git

Vous avez maintenant 2 origines.


1
Cette réponse est plus utile / raffinée que d'autres grâce à l' --pushoption.
Dmitri Zaitsev le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.