Tengo un repositorio Git local que me gustaría enviar a un nuevo repositorio remoto (nuevo repositorio configurado en Beanstalk, si eso es importante).
Mi repositorio local tiene algunas ramas y etiquetas, y me gustaría mantener toda mi historia.
Parece que básicamente solo necesito hacer un git push, pero eso solo carga la masterrama.
¿Cómo presiono todo para obtener una réplica completa de mi repositorio local en el control remoto?

Respuestas:
Para empujar todas sus ramas , use cualquiera (reemplace REMOTE con el nombre del control remoto, por ejemplo "origen"):
Para empujar todas sus etiquetas :
Finalmente, creo que puedes hacer esto todo en un comando con:
Sin embargo, además
--mirror, también empujará sus controles remotos, por lo que esto podría no ser exactamente lo que desea.fuente
--allen lugar de*:*parece más amigablegit push REMOTE --allregresó sinNo refs in common and none specified;hacer nada, mientras que engit push REMOTE "*:*realidad empujó todas las ramas al control remoto.git clone --mirror old-remote-url; cd repo.git; git push --mirror new-remote-url.En el caso como yo, que adquirió un repositorio y ahora está cambiando el origen remoto a un repositorio diferente, uno nuevo y vacío ...
Entonces tiene su repositorio y todas las ramas dentro, pero aún necesita verificar esas ramas para que el
git push --allcomando realmente las empuje también.Debe hacer esto antes de presionar:
Seguido por
fuente
git push '*:*'empujó todas las ramas.git push -allAcabo de empujar al maestro. Estaba transportando repo de github a bitbucket.--track remotes/$remotelugar de--track $remote. Aquí está la línea de comando completa:for remote in `git branch -r | grep -v master `; do git checkout --track remotes/$remote ; doneAquí hay otra versión de lo mismo que funcionó mejor para la situación en la que me encontraba. Resuelve el problema en el que tiene más de un control remoto, le gustaría clonar todas las ramas de remoto
sourcea remotodestinationpero sin tener que verificarlas todas de antemano.(El problema que tuve con la solución de Daniel fue que se negaría a pagar una rama de seguimiento desde el
sourcecontrol remoto si ya la había revisado anteriormente, es decir, no actualizaría mi rama local antes del envío)esto empujará todas las ramas del control remoto
sourcea una rama principaldestination, posiblemente haciendo un empuje no rápido hacia adelante. Aún debe presionar las etiquetas por separado.fuente
remotea otro. ¡Gracias!git push destination +refs/remotes/source/\*:refs/heads/\*--pruneopción.--mirrorparámetro habitual que todos recomiendan. Funciona perfectamente para escenarios en los que solo desea mantener sincronizados dos controles remotos para fines de automatización o auditoría.Esta es la forma más concisa que he encontrado, siempre que el destino esté vacío. Cambie a una carpeta vacía y luego:
Sustituir
https://...porfile:///your/repoetc. según corresponda.fuente
La página del manual de
git-pushla pena leer. En combinación con este sitio web , escribí lo siguiente en mi.git/config:Los
push = :medios "empujan cualquier rama 'coincidente' (es decir, ramas que ya existen en el repositorio remoto y tienen una contraparte local)", mientras quepush = refs/tags/*significa "empujar todas las etiquetas".Así que ahora solo tengo que correr
git pushpara empujar todas las ramas coincidentes y todas las etiquetas.Sí, esto no es exactamente lo que quería el OP (todas las ramas para empujar ya deben existir en el lado remoto), pero podría ser útil para aquellos que encuentran esta pregunta mientras buscan en Google "¿Cómo empujo ramas y etiquetas al mismo tiempo? hora".
fuente
En mi caso lo que funcionó fue.
fuente
origines un alias para el repositorio remoto de URL Git.Reflejando un repositorio
Cree un clon desnudo del repositorio.
Mirror-push al nuevo repositorio.
Elimine el repositorio local temporal que creó en el paso 1.
Duplicar un repositorio que contiene objetos de almacenamiento de archivos grandes de Git
Cree un clon desnudo del repositorio. Reemplace el nombre de usuario de ejemplo con el nombre de la persona u organización propietaria del repositorio, y reemplace el nombre del repositorio de ejemplo con el nombre del repositorio que desea duplicar.
Navegue hasta el repositorio que acaba de clonar.
Tire de los objetos Git Large File Storage del repositorio.
Mirror-push al nuevo repositorio.
Empuje los objetos Git Large File Storage del repositorio a su espejo.
Elimine el repositorio local temporal que creó en el paso 1.
Las instrucciones anteriores provienen de la Ayuda de Github: https://help.github.com/articles/duplicating-a-repository/
fuente
Encontré que las respuestas anteriores todavía tienen algunas cosas poco claras, lo que engañará a los usuarios. Primero, es seguro que
git push new_origin --allygit push new_origin --mirrorno puede duplicar todas las ramas de origen, simplemente duplica las ramas locales existentes a su nuevo_origen.A continuación hay dos métodos útiles que he probado:
1, duplicado por clon bare repo.
git clone --bare origin_url, luego ingrese la carpeta ygit push new_origin_url --mirror. De esta manera, también puede usargit clone --mirror origin_urlambos--barey--mirrordescargará un repositorio sin incluir el espacio de trabajo. por favor refiérase a esto2, si tiene un repositorio git usando
git clone, lo que significa que tiene un repositorio desnudo y un espacio de trabajo git, puede usargit remote add new_origin new_origin_url, y luegogit push new_origin +refs/remotes/origin/\*:refs/heads/\*, y luegogit push new_origin --tagsDe esta manera, obtendrá una rama de cabeza adicional, que no tiene sentido.
fuente
Para empujar ramas y etiquetas (pero no controles remotos):
Esto sería equivalente a combinar las opciones
--tagsy--allparagit push, que git no parece permitir.fuente
+refs/remotes/source/*Basado en la respuesta de @Daniel , hice:
fuente
| grep -v masterse puede reemplazar con| sed 's/\*//'(supongo que excluyómasterpara evitar lo desagradable*que se antepone a la rama actualmente seleccionada) que le permite incluirmastery evitar problemas cuandomasterno es su rama actualmente seleccionada. También lo siento por la necroposición, es solo que esta respuesta me ayudó hoy y quería compartir mi modificación si puede ayudar a otros en mi posición ...Descubrí que ninguno de estos parecía funcionar correctamente para mí. Siéntase libre de encender esto hasta la muerte, pero por alguna razón no pudo lograr que las otras opciones funcionen correctamente.
El resultado esperado fue un repositorio "clonado" a otro remoto (es decir, de Github a otro proveedor):
El problema principal que estaba viendo era que todas las ramas remotas no se recreaban en el nuevo control remoto. Si un comando lo hizo, el nuevo control remoto no tenía el historial de la rama (es decir, hacer un
git checkout branch; git logno mostraría las confirmaciones de rama esperadas).Noté
git checkout -b branchnameque NO es lo mismo quegit checkout branchname(este último es lo que necesitaba). Notégit checkout --track branchnameque no parecía extraer el historial de la rama.Mi solución (basada en powershell):
fuente
El siguiente comando empujará todas las ramas ( incluidas las que nunca ha desprotegido pero presente en su repositorio de git, puede verlas por
git branch -a)git push origin '*:*'fuente
Estaba en un proceso de cambiar de un servicio de control de versiones a otro y necesitaba clonar todos los repositorios, incluidas todas las ramas, etiquetas e historial.
Para lograr lo anterior hice lo siguiente:
git push origin '*:*'El script .sh se usa para pagar todas las ramas al repositorio local:
fuente