Tengo un repo local de Git que me gustaría empujar a un nuevo repo remoto (repo nuevo establecido en Beanstalk, si eso importa). Mi repo local tiene algunas ramas y etiquetas y me gustaría mantener toda mi historia. Parece que básicamente sólo tengo que hacer un git push, pero eso sólo sube la rama maestra. ¿Cómo puedo empujar todo para obtener una réplica completa de mi repo local en el remoto?
Para empujar todas sus ramas, utilice cualquiera de los dos (sustituya REMOTE por el nombre del remoto, por ejemplo "origen"):
git push REMOTE '*:*'
git push REMOTE --all
Para empujar todas sus etiquetas:
git push REMOTE --tags
Por último, creo que se puede hacer todo esto en un solo comando con:
git push REMOTE --mirror
Sin embargo, además --mirror
, también empujará tus mandos, así que esto podría no ser exactamente lo que quieres.
En el caso como yo de que hayas adquirido un repo y ahora estés cambiando el origen remoto a un repo diferente, uno nuevo vacío...
Así que tienes tu repo y todas las ramas dentro, pero todavía tienes que hacer checkout de esas ramas para que el comando git push --all
realmente las empuje también.
Deberías hacer esto antes de hacer el push:
for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done
Seguido de
git push --all
Aquí hay otra toma en la misma cosa que funcionó mejor para la situación que estaba en. Resuelve el problema cuando se tiene más de un remoto, le gustaría clonar todas las ramas en remoto fuente
a remoto destino
pero sin tener que comprobar todos ellos de antemano.
(El problema que tenía con la solución de Daniel era que se negaba a hacer el checkout de una rama de seguimiento desde el remoto fuente
si ya la había comprobado previamente, es decir, no actualizaba mi rama local antes del push)
git push destination +refs/remotes/source/*:refs/heads/*
Nota:
Si no estás usando el CLI directo, debes escapar los asteriscos:
git push destino +refs/remotas/fuente/\*:refs/cabezales/\*
.
esto empujará todas las ramas en el "origen" remoto a una rama principal en el "destino", posiblemente haciendo un push no rápido. Usted todavía tiene que empujar las etiquetas por separado.