Configurar git para tirar y empujar todas las twigs

Me gustaría mover y tirar de todas las twigs de forma pnetworkingeterminada, incluidas las nuevas.

¿Hay alguna configuration que pueda definir para eso?

De lo contrario, cuando agregue una nueva twig localmente y quiero extraerla del server, ¿cuál es la forma más sencilla de hacerlo?

Creé una nueva twig con el mismo nombre e intenté tirar pero no funciona. Me pide toda la configuration remota de la sucursal. ¿Cómo lo configuro?

La forma más simple es hacer:

git push --all origin 

Esto empujará tags y twigs.

Con git moderno, siempre busca todas las twigs (como twigs de rastreo remoto en el espacio de nombres refs/remotes/origin/* , visible con git branch -r o git remote show origin ).

Por defecto (ver la documentation de la variable de configuration push.default ) se presionan las twigs correspondientes , lo que significa que primero tienes que hacer git push origin branch para git para empujarlo siempre en git push .

Si desea presionar siempre todas las twigs , puede configurar push refspec. Suponiendo que el control remoto se llame origin , puede usar git config :

 $ git config --add remote.origin.push '+refs/heads/*:refs/heads/*' $ git config --add remote.origin.push '+refs/tags/*:refs/tags/*' 

o edite directamente el file .git/config para tener algo como lo siguiente:

 ["origen" remoto]
         url = usuario@ejemplo.com: /srv/git/repo.git
         fetch = + refs / heads / *: refs / remotos / origen / *
         fetch = + refs / tags / *: refs / tags / *
         push = + refs / heads / *: refs / heads / *
         push = + refs / tags / *: refs / tags / *

Incluir el + en la especificación push es probablemente una mala idea, ya que significa que git hará felizmente un avance no rápido incluso sin -f , y si el server remoto está configurado para aceptarlos, puede perder el historial.

Prueba solo esto:

 $ git config --add remote.origin.push 'refs/heads/*:refs/heads/*' $ git config --add remote.origin.push 'refs/tags/*:refs/tags/*' $ git config --add remote.origin.fetch 'refs/heads/*:refs/remotes/origin/*' $ git config --add remote.origin.fetch 'refs/tags/*:refs/tags/*' 

Utilicé los commands a continuación para migrar todas las twigs al nuevo repository.

 ~$ git clone --mirror <url_of_old_repo> ~$ cd <name_of_old_repo> ~$ git remote add new-origin <url_of_new_repo> ~$ git push new-origin master ~$ git push new-origin --mirror 

NOTA : Tuve que usar el segundo command pasado (es decir, pulsar el maestro primero) al clonar un repository de Atlassian Stash a AWS CodeCommit (repository en blanco). No estoy seguro del motivo, pero después de presionar ( git push new-origin --mirror ) la twig pnetworkingeterminada se refería a alguna otra twig además de la master .

Si está moviendo sucursales a un repository nuevo desde un antiguo y NO tiene todas las sucursales de repos anteriores, deberá rastrearlas primero.

 for remote in `git branch -r | grep -v '\->'`; do git branch --track $remote; done 

A continuación, agregue su nuevo repository remoto:

 git remote add bb <path-to-new-repo> 

Luego puedes presionar todo usando este command:

 git push -u bb --all 

O puede configurar el repository utilizando los commands de configuration de git que se mencionan en las otras respuestas aquí si no está haciendo esto una sola vez o si solo está buscando mover sucursales locales.

El punto importante, las otras respuestas solo presionan todas las twigs LOCALES. Si las sucursales solo existen en un repository REMOTO alternativo, no se moverán sin hacer un seguimiento primero. El ciclo for presentado aquí ayudará con eso.

Para ver todas las twigs sin usar git branch -a debes ejecutar:

 for remote in `git branch -r`; do git branch --track $remote; done git fetch --all git pull --all 

Ahora puedes ver todas las twigs:

 git branch 

Para empujar todas las twigs, intente:

 git push --all 

Si va a mover todas las sucursales a un nuevo repository desde un antiguo, entonces en su repository local necesita configurar el seguimiento de cada sucursal en las sucursales de origen existentes, antes de pasar al nuevo repository, de lo contrario, todas sus sucursales de origen no aparecerán en el nuevo origen. Haga esto manualmente rastreando o revisando cada twig, o use un trazador de líneas:

 for remote in `git branch -r | grep -v '\->' | grep -v master`; do git branch --track `echo $remote|sed 's=origin/=='` `echo $remote`; done 

Este command de una línea se basa en versiones de él en otras respuestas en esta página, pero podría decirse que es mejor porque:

  1. configura correctamente el seguimiento de bifurcación, a diferencia de algunas variantes anteriores de este command en esta página, que solo proporcionan un parámetro para –cardar y, por lo tanto, cada twig finaliza el seguimiento maestro – no es bueno
  2. nombra las sucursales locales sin el prefijo "origen /" que personalmente no quiero, y es coherente con lo que sucede cuando se registra una sucursal normalmente.
  3. se saltea el maestro de seguimiento ya que eso ya está sucediendo
  4. en realidad no compra nada por lo tanto es rápido
  5. evita tropezar con el -> en la salida de la twig git -r

Luego, si está cambiando de origen, reemplace el enlace al origen anterior y señale un nuevo control remoto. Asegúrese de crear primero el nuevo control remoto, utilizando la GUI de bitbucket / github, pero no agregue ningún file o habrá un problema de fusión. P.ej

 git remote set-url origin git@bitbucket.org:YOUR/SOMEREPO.git 

Ahora empuja. Tenga en count que el segundo command es necesario para empujar las tags también:

 git push -u --all origin git push --tags origin 
 for b in $(git branch -a | grep -v master | \ sed -e "s|remotes\/origin\/\(.*\)|\1|g"); do git checkout $b && \ git push origin $b; done 

Solución sin origin hardcoding en config

Use lo siguiente en su gitconfig global

 [remote] push = +refs/heads/* push = +refs/tags/* 

Esto empuja todas las twigs y todas las tags

¿Por qué NO debes hardcode origin en config?

Si codificaste:

  1. Terminará con el origin como control remoto en todos los repositorys. Por lo tanto, no podrá agregar el origen, pero necesita usar set-url .
  2. Si una herramienta crea un control remoto con un nombre diferente, todas las configuraciones no se aplicarán. Luego tendrá que cambiar el nombre del control remoto, pero cambiar el nombre no funcionará porque el origin ya existe (desde el punto 1) recuerde 🙂

El git moderno ya se encarga de recoger

Según la respuesta de Jakub Narębski:

Con git moderno siempre busca todas las twigs (como twigs de rastreo remoto en refs / remotes / origin / * namespace