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 master
rama.
¿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
--all
en lugar de*:*
parece más amigablegit push REMOTE --all
regresó 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 --all
comando realmente las empuje también.Debe hacer esto antes de presionar:
Seguido por
fuente
git push '*:*'
empujó todas las ramas.git push -all
Acabo de empujar al maestro. Estaba transportando repo de github a bitbucket.--track remotes/$remote
lugar 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 ; done
Aquí 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
source
a remotodestination
pero 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
source
control 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
source
a una rama principaldestination
, posiblemente haciendo un empuje no rápido hacia adelante. Aún debe presionar las etiquetas por separado.fuente
remote
a otro. ¡Gracias!git push destination +refs/remotes/source/\*:refs/heads/\*
--prune
opción.--mirror
pará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/repo
etc. según corresponda.fuente
La página del manual de
git-push
la 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 push
para 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
origin
es 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 --all
ygit push new_origin --mirror
no 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_url
ambos--bare
y--mirror
descargará 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 --tags
De 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
--tags
y--all
paragit push
, que git no parece permitir.fuente
+refs/remotes/source/*
Basado en la respuesta de @Daniel , hice:
fuente
| grep -v master
se puede reemplazar con| sed 's/\*//'
(supongo que excluyómaster
para evitar lo desagradable*
que se antepone a la rama actualmente seleccionada) que le permite incluirmaster
y evitar problemas cuandomaster
no 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 log
no mostraría las confirmaciones de rama esperadas).Noté
git checkout -b branchname
que NO es lo mismo quegit checkout branchname
(este último es lo que necesitaba). Notégit checkout --track branchname
que 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