En resumen: ¿hay alguna manera de hacer que un repositorio de git empuje y extraiga de una lista de repositorios remotos (en lugar de un solo "origen")?
El largo: a menudo tengo una situación en la que estoy desarrollando una aplicación en varias computadoras, con conectividad diferente, por ejemplo, una computadora portátil mientras estoy en tránsito, una computadora "A" mientras estoy en un lugar determinado y otra computadora "B" mientras que en otro. Además, la computadora portátil puede tener conectividad solo con "A" o "B", y algunas veces con ambas.
Lo que me gustaría es que git siempre "jale" y "empuje" a todas las computadoras a las que se puede conectar actualmente, por lo que es más fácil saltar de una máquina a otra y continuar trabajando sin problemas.

git, se incluye en la respuesta de malvineous a continuación . La respuesta aceptada es incorrecta.Respuestas:
Puede configurar múltiples repositorios remotos con el
git remotecomando:Para obtener todos los controles remotos configurados y actualizar las ramas de seguimiento, pero no fusionarse
HEAD, haga lo siguiente:Si no está conectado actualmente a uno de los controles remotos, tomará un tiempo de espera o arrojará un error, y pasará al siguiente. Tendrá que fusionarse manualmente desde los repositorios recuperados o
cherry-pick, según cómo desee organizar la recopilación de cambios.Para obtener la rama maestra de alt y colocarla en tu cabeza actual, haz lo siguiente:
De hecho,
git pulles casi una forma abreviada degit pull origin HEAD(en realidad, se ve en el archivo de configuración para determinar esto, pero se entiende la idea).Para enviar actualizaciones, debe hacer eso en cada repositorio manualmente.
Creo que un impulso fue diseñado teniendo en cuenta el flujo de trabajo del repositorio central.
fuente
¡Hacer esto manualmente ya no es necesario , con versiones modernas de
git! Ver la solución de Malvineous , a continuación.Reproducido aquí:
Respuesta original:
Este algo que he estado usando durante bastante tiempo sin malas consecuencias y sugerido por Linus Torvalds en la lista de correo de git .
La solución de araqnid es la adecuada para llevar el código a su repositorio ... pero cuando, como yo, tiene múltiples fuentes ascendentes autoritativas equivalentes (mantengo algunos de mis proyectos más críticos clonados tanto en una cadena ascendente privada, GitHub y Codaset), Puede ser un dolor empujar cambios a cada uno, todos los días.
En pocas palabras,
git remote addtodos sus controles remotos individualmente ... y luegogit config -ey agregue un control remoto combinado. Suponiendo que tenga este repositorioconfig:... para crear un control remoto combinado para
"Paws"y"Codaset", puedo agregar lo siguiente después de todo eso:Una vez que haya hecho esto, cuando
git push Origin Masterlo haga, presionará a ambosPaws/MasteryCodaset/Mastersecuencialmente, haciendo la vida un poco más fácil.fuente
git config -eabre el.git/configarchivo en su editor preferido.gitla línea de comandos lo admite de forma nativa, congit remote set-url ... --add.[branch "Master"]conjuntoremote = Originygit pullusará ambos controles remotos.Desde git 1.8 (octubre de 2012) puede hacerlo desde la línea de comandos:
Luego
git pushempujará al usuario1 @ repo1, luego empujará al usuario2 @ repo2.fuente
git fetch. (Teniendo en cuenta esto, no entiendo cuál es el propósito degit remote set-url --addpuede estar sin--push.)Agregué estos alias a mi ~ / .bashrc:
fuente
git config alias.pushall '!for i ingit remote; do git push $i; done;'alias pushall='for i in `git remote`; do echo "Pushing to " $i; git push $i; done;'Puede agregar controles remotos con:
Luego, para actualizar todos los repositorios:
fuente
Aquí está mi ejemplo con script bash dentro de la
.gitconfigsección de aliasfuente
Agregué dos pushurl separados al "origen" remoto en el archivo .git congfig. Cuando corro
git push origin "branchName"Entonces correrá y empujará a cada url. No estoy seguro de si hay una manera más fácil de lograr esto, pero esto funciona para mí para empujar al código fuente de Github y empujar al código fuente My.visualStudio al mismo tiempo.fuente
Me tomé la libertad de ampliar la respuesta de nona-urbiz; simplemente agregue esto a su ~ / .bashrc:
Uso:
Si no proporciona ningún argumento de bifurcación para git-pullall, la extracción de los controles remotos no predeterminados fallará; dejó este comportamiento tal como está, ya que es análogo a git.
fuente
Necesitará un script para recorrerlos. Git no proporciona un "empujar todo". Teóricamente, podría hacer un empuje en múltiples hilos, pero un método nativo no está disponible.
Fetch es aún más complicado, y recomendaría hacerlo linealmente.
Creo que su mejor respuesta es tener una máquina que todos empujen / tiren, si eso es posible.
fuente
Para actualizar los controles remotos (es decir, el
pullcaso), las cosas se han vuelto más fáciles.La declaración de Linus.
en la entrada referenciada en la lista de correo de Git en la respuesta de elliottcable ya no es cierto.
git fetchaprendí el--allparámetro en algún lugar del pasado que permite obtener todos los controles remotos de una sola vez.Si no se solicitan todos, uno podría usar el
--multipleinterruptor para especificar múltiples controles remotos o un grupo.fuente
Quería trabajar en VSO / TFS, luego presionar públicamente a GitHub cuando esté listo. Repo inicial creado en VSO privado. Cuando llegó el momento de agregar a GitHub, lo hice:
Trabajó como un campeón ...
Para una verificación de cordura, emita "git remote -v" para enumerar los repositorios asociados con un proyecto.
De manera simple, funcionó para mí ... Espero que esto ayude a alguien.
fuente
git push -fsin una razón, por ejemplo, fallargit pusho saber exactamente lo que uno está haciendo, es una mala idea y potencialmente dañina. Esto tampoco responde la pregunta, sino cómo agregar un segundo control remoto.agregue un alias a gitconfig global (/home/user/.gitconfig) con el siguiente comando.
Una vez que confirma el código, decimos
para empujar al origen por defecto. Después del alias anterior, podemos decir
y el código se actualizará a todos los controles remotos, incluido el control remoto de origen.
fuente
Agregar el
allcontrol remoto se vuelve un poco tedioso ya que debe configurarlo en cada máquina que usa.Además, los alias
bashy siempre que todos asuman que tienes empujarán a todos los controles remotos. (Ej: tengo una bifurcación de eso que mantengo en GitHub y GitLab. Tengo el upstreamgitsshagagregado el control remoto , pero no tengo permiso para presionarlo).Aquí hay un
gitalias que solo empuja a controles remotos con una URL de inserción que incluye@.fuente
fuente