tipos tag remota rama etiquetas crear cambiar git

remota - git push tag



Empuje el repositorio local de Git a un nuevo control remoto que incluya todas las ramas y etiquetas (11)

Aquí hay otra versión de la misma cosa que funcionó mejor para la situación en la que me encontraba. Resuelve el problema donde tiene más de un control remoto, le gustaría clonar todas las sucursales desde el source remoto hasta el destination remoto destination sin tener que verificarlas todas. antemano.

(El problema que tuve con la solución de Daniel fue que se negaría a retirar una rama de seguimiento del control remoto de source si ya lo había comprobado anteriormente, es decir, no actualizaría mi sucursal local antes del envío)

git push destination +refs/remotes/source/*:refs/heads/*

Nota: Si no está utilizando la CLI directa, debe escapar de los asteriscos:

git push destination +refs/remotes/source//*:refs/heads//*

  • @mattalxndr

esto empujará todas las ramas en la source remota a una rama principal en el destination , posiblemente haciendo un impulso no hacia adelante. Todavía tienes que empujar las etiquetas por separado.

Tengo un repositorio Git local que me gustaría enviar a un nuevo repositorio remoto (nuevo repositorio creado en Beanstalk, si eso importa). Mi repositorio local tiene algunas ramas y etiquetas y me gustaría conservar toda mi historia. Parece que básicamente solo necesito hacer un empujón de Git, pero eso solo carga la rama maestra. ¿Cómo presiona todo para obtener una réplica completa de mi repositorio local en el control remoto?


Basado en la respuesta de hice:

for remote in /`git branch | grep -v master/` do git push -u origin $remote done


En el caso como yo, usted adquirió un repositorio y ahora está cambiando el origen remoto a un repositorio diferente, uno nuevo vacío ...

Así que tienes tu repo y todas las ramas en el interior, pero aún necesitas revisar esas ramas para que el comando git push --all realmente empuje esos también.

Debes hacer esto antes de empujar:

for remote in `git branch -r | grep -v master `; do git checkout --track $remote ; done

Seguido por

git push --all


En mi caso lo que funcionó fue.

git push origin --all


Encontré que las respuestas anteriores aún tienen algunas cosas que no están claras, lo que inducirá a error a los usuarios. Primero, es seguro que git push new_origin --all y git push new_origin --mirror no puede duplicar todas las ramas de origen, solo duplica las sucursales locales existentes en su new_origin.

A continuación hay dos métodos útiles que he probado:

1, duplicado por clon simple. git clone --bare origin_url , luego ingrese a la carpeta, y git push new_origin_url --mirror . De esta manera, también puede usar git clone --mirror origin_url , tanto --bare como --mirror descargarán un repositorio --mirror , no incluyendo espacio de trabajo. por favor refiera this

2, si tienes un repositorio de git clone utilizando git clone , lo que significa que tienes un repositorio simple y el espacio de trabajo de git, puedes usar el git remote add new_origin new_origin_url y luego git push new_origin +refs/remotes/origin//*:refs/heads//* , y luego git push new_origin --tags

De esta manera, obtendrás una rama adicional, que no tiene sentido.


Encontré que ninguno de estos parecía funcionar correctamente para mí. Siéntase libre de morir en llamas hasta la muerte, pero por alguna razón no podría hacer que las otras opciones funcionen correctamente.

El resultado esperado fue un repo "clonado" a otro remoto (es decir, de Github a otro proveedor):

  • Todas las ramas se crean en el nuevo control remoto
  • Todo el historial de sucursales se crea en un nuevo control remoto
    • (esto se perdió en todas las soluciones que probé)
  • Todas las etiquetas se crean en el nuevo control remoto
  • La fuente se mueve sobre (un dado)
  • No destructivo (dando pausa a la opción --mirror)

El principal problema que estaba viendo era que las ramas remotas no se recreaban en el nuevo control remoto. Si un comando lo hiciera, el nuevo control remoto no tenía el historial de la rama (es decir, hacer una git checkout branch; git log no mostraría las confirmaciones de rama esperadas).

Noté que git checkout -b branchname NO es lo mismo que git checkout branchname (este último es lo que necesitaba). Me doy cuenta de que git checkout --track branchname no parece que extraiga el historial de sucursales.

Mi solución (basada en powershell):

Function Git-FetchRemoteBranches { $originalbranch = (git symbolic-ref HEAD).split("/")[-1] Foreach ($entry in (git branch -r)) { If ($entry -like "*->*") { $branch = $entry.split("->")[2].split("/")[1] } else {$branch = $entry.split("/")[1]} Write-Host "--Trying git checkout " -NoNewline Write-Host "$branch" -Foreground Yellow git checkout $branch Remove-Variable branch -Force ""} #Switch back to original branch, if needed If ( ((git symbolic-ref HEAD).split("/")[-1]) -ne $originalbranch) { "Switching back to original branch" git checkout $originalbranch Remove-Variable originalbranch -Force } } git clone http://remoterepo cd remoterepo Git-FetchRemoteBranches git remote add newremote git push newremote --all git push newremote --tags #Not sure if neeeded, but added for good measure


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:

# Note the period for cwd >>>>>>>>>>>>>>>>>>>>>>>> v git clone --bare https://your-source-repo/repo.git . git push --mirror https://your-destination-repo/repo.git

Sustituya https://... por file:///your/repo etc., según corresponda.


Para empujar todas sus sucursales , use cualquiera (reemplace REMOTO con el nombre del remoto, por ejemplo, "origen"):

git push REMOTE ''*:*'' git push REMOTE --all

Para empujar todas tus etiquetas :

git push REMOTE --tags

Finalmente, creo que puedes hacer todo esto en un solo comando con:

git push REMOTE --mirror

Sin embargo, además, --mirror , también empujará sus controles remotos, por lo que esto podría no ser exactamente lo que desea.


Para empujar ramas y etiquetas (pero no remotos):

git push origin ''refs/tags/*'' ''refs/heads/*''

Esto sería equivalente a combinar las opciones --tags y --tags opciones para git push , que git no parece permitir.


Vale la pena leer la página de manual de git-push . Combinado con este sitio web , escribí lo siguiente en mi .git/config :

[remote "origin"] url = … fetch = … push = : push = refs/tags/*

push = : significa "push cualquier ramificación ''coincidente'' (es decir, las ramas que ya existen en el repositorio remoto y tienen una contraparte local)", mientras que push = refs/tags/* significa "push all tags".

Así que ahora solo tengo que ejecutar 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 puede ser útil para aquellos que encuentran esta pregunta mientras buscan en Google "¿cómo puedo empujar ramas y etiquetas al mismo tiempo?" hora".


Reflejando un repositorio

Crear un clon desnudo del repositorio.

git clone --bare https://github.com/exampleuser/old-repository.git

Espejo-empuje al nuevo repositorio.

cd old-repository.git git push --mirror https://github.com/exampleuser/new-repository.git

Elimine el repositorio local temporal que creó en el paso 1.

cd .. rm -rf old-repository.git

Reflejo de un repositorio que contiene objetos de Git Large File Storage

Crear un clon desnudo del repositorio. Reemplace el nombre de usuario de ejemplo con el nombre de la persona u organización que posee el repositorio, y reemplace el nombre de repositorio de ejemplo con el nombre del repositorio que desea duplicar.

git clone --bare https://github.com/exampleuser/old-repository.git

Navegue hasta el repositorio que acaba de clonar.

cd old-repository.git

Tire de los objetos Git Large File Storage del repositorio.

git lfs fetch --all

Espejo-empuje al nuevo repositorio.

git push --mirror https://github.com/exampleuser/new-repository.git

Inserte los objetos Git Large File Storage del repositorio en su espejo.

git lfs push --all https://github.com/exampleuser/new-repository.git

Elimine el repositorio local temporal que creó en el paso 1.

cd .. rm -rf old-repository.git

La instrucción anterior proviene de la Ayuda de Github: this