tipos tag remove qué oneline log hace existen etiquetas crear git github

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í:

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.