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.
Chris Dutrow
la source
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
meagar
la source
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://[email protected]/user/myproject.git
Josh_at_Savings_Champion
la source
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://[email protected]/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
    
dihardmg
la source
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
dinith jayabodhi
la source
1
git remote add origin2 https://github.com/Company_Name/repository_name.git

et pour une utilisation push:

git push -u origin2 master
Lovepreet Kaur
la source
1
git remote set-url --add --push origin [email protected]:user/my-project.git
git remote set-url --add --push origin [email protected]:user/my-project.git

Vous avez maintenant 2 origines.

Ostap B.
la source
1
Cette réponse est plus utile / raffinée que d'autres grâce à l' --pushoption.
Dmitri Zaitsev le