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.