tag - Git-Empujando código a dos controles remotos
tipos de etiquetas en git (2)
En las versiones recientes de Git, puede agregar varios pushurl
s para un control remoto determinado. Usa lo siguiente para agregar dos pushurl
s a tu origin
:
git remote set-url --add --push origin git://original/repo.git
git remote set-url --add --push origin git://another/repo.git
Así que cuando empujas hacia el origin
, se enviará a ambos repositorios.
ACTUALIZACIÓN 1 : Git 1.8.0.1 y 1.8.1 (y posiblemente otras versiones) parecen tener un error que hace que --add
reemplace la URL original la primera vez que la use, por lo que debe volver a agregar la URL original usando El mismo comando.Hacer git remote -v
debería revelar las URL actuales para cada remoto.
ACTUALIZACIÓN 2: Junio C. Hamano, el mantenedor de Git, explicó cómo se diseñó. Al hacer git remote set-url --add --push <remote_name> <url>
agrega un pushurl
para un control remoto dado, que anula la URL predeterminada para los push. Sin embargo, puede agregar varios pushurl
s para un control remoto dado, lo que luego le permite presionar a varios controles remotos usando un solo git push
. Puedes verificar este comportamiento a continuación:
$ git clone git://original/repo.git
$ git remote -v
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep ''^remote/.''
remote.origin.url=git://original/repo.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
Ahora, si desea enviar a dos o más repositorios con un solo comando, puede crear un nuevo control remoto llamado all
(como lo sugiere @Adam Nelson en los comentarios), o seguir usando el origin
, aunque este último nombre es menos descriptivo para este propósito. Si aún desea utilizar el origin
, omita el siguiente paso y use el origin
lugar de all
en todos los demás pasos.
Entonces, agreguemos un nuevo control remoto llamado all
que haremos referencia más adelante al enviar a varios repositorios:
$ git remote add all git://original/repo.git
$ git remote -v
all git://original/repo.git (fetch) <-- ADDED
all git://original/repo.git (push) <-- ADDED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep ''^remote/.all''
remote.all.url=git://original/repo.git <-- ADDED
remote.all.fetch=+refs/heads/*:refs/remotes/all/* <-- ADDED
Luego, agreguemos un pushurl
a all
remoto, apuntando a otro repositorio:
$ git remote set-url --add --push all git://another/repo.git
$ git remote -v
all git://original/repo.git (fetch)
all git://another/repo.git (push) <-- CHANGED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep ''^remote/.all''
remote.all.url=git://original/repo.git
remote.all.fetch=+refs/heads/*:refs/remotes/all/*
remote.all.pushurl=git://another/repo.git <-- ADDED
Aquí git remote -v
muestra el nuevo pushurl
para push, así que si lo hace git push all master
, empujará la rama master
a git://another/repo.git
solamente. Esto muestra cómo pushurl
anula la url predeterminada (remote.all.url).
Ahora agreguemos otro pushurl
apunta al repositorio original:
$ git remote set-url --add --push all git://original/repo.git
$ git remote -v
all git://original/repo.git (fetch)
all git://another/repo.git (push)
all git://original/repo.git (push) <-- ADDED
origin git://original/repo.git (fetch)
origin git://original/repo.git (push)
$ git config -l | grep ''^remote/.all''
remote.all.url=git://original/repo.git
remote.all.fetch=+refs/heads/*:refs/remotes/all/*
remote.all.pushurl=git://another/repo.git
remote.all.pushurl=git://original/repo.git <-- ADDED
Usted ve que ambos pushurl
s que añadimos se guardan. Ahora, un solo git push all master
empujará la rama master
a git://another/repo.git
y git://original/repo.git
.
Esta pregunta ya tiene una respuesta aquí:
- pull / push desde múltiples ubicaciones remotas 14 respuestas
Tengo dos repositorios de git remotos. origin
y github
Empujo mi rama devel
a ambos repositorios.
git push -u origin devel
git push -u github devel
Pero entonces, cuando lo haga. git push
Solo sería empujado a github
.
De todos modos, ¿puedo configurar mis dos mandos a distancia para que pueda enviar cambios a ambos repositorios con un solo comando?
Para enviar a ambos remotos con un comando, puede crear un alias para él:
git config alias.pushall ''!git push origin devel && git push github devel''
Con esto, cuando uses el comando git pushall
, se actualizarán ambos repositorios.