¿Puede un proyecto tener múltiples orígenes?

188

¿Puede un proyecto tener dos (o más) "orígenes" en Git?

Me gustaría impulsar un solo proyecto tanto a github como a un servidor Heroku .

Específicamente, este error aparece al agregar el repositorio de github:

$ git remote add origin https://github.com/Company_Name/repository_name.git
fatal: remote origin already exists.
Chris Dutrow
fuente
8
Puede tener tantos repositorios remotos como desee, pero debe darles diferentes nombres.
Felix Kling
El nombre del repositorio es diferente en este caso. ¿Es la palabra "origen" un nombre que se puede cambiar?
Chris Dutrow
44
git remote rename <old> <new>: linux.die.net/man/1/git-remote . Pero también puede nombrar el repositorio de Github de manera diferente ...
Felix Kling
1
posible duplicado de pull / push desde múltiples ubicaciones remotas
AD7six
¿Y es posible hacer que uno de los controles remotos sea el predeterminado para que no me pidan que escriba explícitamente el nombre de ese control remoto cada vez que presiono?
40 detectives

Respuestas:

276

Puede tener tantos controles remotos como desee, pero solo puede tener un control remoto llamado "origen". El control remoto llamado "origen" no es especial de ninguna manera, excepto que es el control remoto predeterminado creado por Git cuando clona un repositorio existente. Puede configurar un segundo control remoto, presionar / extraer desde ese control remoto y configurar algunas ramas para rastrear ramas desde ese control remoto en lugar de su origen.

Intente agregar un control remoto llamado "github" en su lugar:

$ 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
fuente
44
Como lo indica la respuesta con los votos más altos para la pregunta que esta posiblemente duplica, un control remoto puede referirse a múltiples repositorios. Por lo tanto, puede pasar a un control remoto y actualizar dos o más repositorios, aunque no está claro si ese es el objetivo del OP.
AD7six
Sin embargo, ¿cuáles son algunos ejemplos prácticos de por qué querrías hacer esto? ¿Por qué tendría un directorio apuntado a varios repositorios? Cada repositorio generalmente tiene su propio directorio dedicado
dspacejs
44
@mightyspaj Casi todos los que se implementan en Heroku tienen una llamada remota originy una llamada remota heroku.
meagar
@mightyspaj, o si tu equipo está utilizando tenedores y a veces quieres acceder a ellos. Hacemos eso en nuestro equipo trabajando con equipos en diferentes UTC para que cuando aprobemos relaciones públicas, podamos cambiar el nombre / presionar en su nombre mediante el uso de la bifurcación y podamos fusionar el código ahora, no mañana).
Benoit Drapeau
¿Hay alguna manera de empujar todas las sucursales locales a la vez al nuevo control remoto?
Tanasis
89

Como nota al margen para cualquiera que se encuentre con esta pregunta más adelante, es posible hacer que el origen empuje a más de un servidor de repositorio git a la vez.

Puede lograr esto utilizando el siguiente comando para agregar otra URL al control remoto de origen.

git remote set-url --add origin ssh://[email protected]/user/myproject.git
Josh_at_Savings_Champion
fuente
8
Para más pensamientos sobre esto, vea esta pregunta .
moi
3
Ok, entonces, ¿cómo elimino uno de estos orígenes sin eliminarlos todos?
Michael
@ Michael Puede editar el ./git/configarchivo y eliminar el archivo de URL en la sección ["origen" remoto]
Pini Cheyni
8
@Michaelgit remote set-url --delete origin ssh://[email protected]/user/myproject.git
Afrig Aminuddin
¿Todos los controles remotos deben tener el mismo historial de confirmación? ¿Qué pasa si quiero enviar ciertas confirmaciones a un control remoto y no al otro?
Qasim
44

Aquí hay un proyecto de muestra con múltiples controles remotos, GitHub y GitLab:

  1. Agregar repositorio remoto para GitHub

    $ git remote add github https://github.com/Company_Name/repository_name.git
    
  2. Agregar repositorio remoto para GitLab

    $ git remote add gitlab https://gitlab.com/Company_Name/repository_name.git
    
  3. Ahora tiene múltiples controles remotos en el proyecto. Verificación doble congit 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. ¿Cómo empujas a múltiples repositorios?

    $ git push github && git push gitlab
    
dihardmg
fuente
2
¿No solo $ git pushempujará a todos los controles remotos?
Water Cooler v2
Tenemos un problema cuando trato de empujar github y luego empuje automático a gitlab. ¿Puedes ayudarme por favor? Quiero empujar uno por uno de origen.
Mitul Marsoniya
¿Cómo trabajo con esto si tengo dos proyectos en gitlab, dos repositorios? obtengo código de un proyecto y luego lo envío al otro proyecto?
Muzi Jack
2

puede agregar otra cuenta remota a su repositorio dando un nombre diferente en lugar del origen. Puede usar nombres como origin2. para que su comando git pueda modificarse como

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

y para uso push:

git push -u origin2 master
Lovepreet Kaur
fuente
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

Ahora tienes 2 orígenes.

Ostap B.
fuente
1
Esta respuesta es más útil / refinada que otras gracias a la --pushopción.
Dmitri Zaitsev