Me gustaría empujar y tirar todas las ramas de forma predeterminada, incluidas las recién creadas.
¿Hay una configuración que pueda definir para ello?
De lo contrario, cuando agrego una nueva sucursal, localmente y quiero extraerla del servidor, ¿cuál es la forma más sencilla de hacerlo?
Creé una nueva rama con el mismo nombre e intenté extraer pero no funciona. Me pide toda la configuración remota de la rama. ¿Cómo lo configuro?
                    
                        git
                                version-control
                                branch
                                push
                                
                    
                    
                        Lakshman Prasad
fuente
                
                fuente

Respuestas:
La forma más simple es hacer:
Esto empujará etiquetas y ramas.
fuente
-uuna vez, por ejemplogit push --all origin -u, el seguimiento se configura y luego puede simplemente usarlogit push.git push --tags originpara empujar todas las etiquetas.Con git moderno, siempre busca todas las ramas (como ramas de seguimiento remoto en el
refs/remotes/origin/*espacio de nombres, visible congit branch -rogit remote show origin).De forma predeterminada (consulte la documentación de la
push.defaultvariable de configuración), empuja las ramas coincidentes , lo que significa que primero debe hacergit push origin branchque git lo empuje siempre activadogit push.Si desea empujar siempre todas las ramas , puede configurar push refspec. Asumiendo que el control remoto se llama
origin, puede usar git config :o edite directamente el
.git/configarchivo para tener algo como lo siguiente:["origen" remoto] url = [email protected]: /srv/git/repo.git fetch = + refs / heads / *: refs / remotes / origin / * fetch = + refs / tags / *: refs / tags / * push = + refs / heads / *: refs / heads / * push = + refs / tags / *: refs / tags / *fuente
git push --all origines bueno publicar una vez todas las ramas y etiquetas, aunque el valor predeterminado hasta la versión actual 'semántica' coincidente significaría que empujaría todas las ramas después ... a menos que agregue una nueva rama o etiqueta. La configuración para "empujar [...] todas las ramas por defecto" es como está escrita.fatal: Invalid refspec ''+refs/heads/*:refs/heads/*''(Nota: estoy en git 2.0. Todavía estoy trabajando en cómo solucionar esto.)push.defaultessimple.Incluir el + en la especificación de inserción es probablemente una mala idea, ya que significa que git felizmente hará una inserción no rápida, incluso sin -f , y si el servidor remoto está configurado para aceptarlas, puede perder el historial.
Prueba solo esto:
fuente
--globalopción a cada uno de estos para que sea el valor predeterminado global para todos sus repositorios.git remote add.Había utilizado los siguientes comandos para migrar todas las ramas al nuevo repositorio.
NOTA : Tuve que usar el comando penúltimo último (es decir, presionar maestro primero) mientras clonaba un repositorio de Atlassian Stash a AWS CodeCommit (repositorio en blanco). No estoy seguro de la razón, pero después de presionar (
git push new-origin --mirror) la rama predeterminada se refería a otra rama que no seamaster.fuente
git push new_origin --allsolo empuje sus ramas locales actuales a new_origin, no todas las ramas de origen.--barerepositorio, que es un poco diferente de un repositorio normal, solo tiene los.gitarchivos, no sus archivos. Es perfectamente suficiente si no vas a trabajar en él. Ver--barey--mirrorgit-scm.com/docs/git-clone .Si está moviendo sucursales a un nuevo repositorio de uno antiguo y NO tiene todas las sucursales locales de repositorios antiguas, primero tendrá que rastrearlas.
Luego agregue su nuevo repositorio remoto:
Entonces puedes empujar todo usando este comando:
O puede configurar el repositorio utilizando los comandos de configuración de git que se indican en las otras respuestas aquí si no lo hace una vez o solo busca mover sucursales locales.
El punto importante, las otras respuestas solo empujan todas las ramas LOCALES. Si las ramas solo existen en un repositorio REMOTO alternativo, no se moverán sin rastrearlas primero. El bucle for presentado aquí ayudará con eso.
fuente
git branch --track reponame origin/reponameque de lo contrario obtendrá un seguimiento de todas las ramas remotas en la rama local actualgit branch -r | grep -v '\->' | sed 's/ origin\///', que da solo el nombre de la rama remota.Para ver todas las ramas sin usar
git branch -adebe ejecutar:Ahora puedes ver todas las ramas:
Para empujar todas las ramas intente:
fuente
git fetch --all?Si está moviendo todas las sucursales a un nuevo repositorio de uno antiguo, entonces en su repositorio local debe configurar el seguimiento de cada sucursal a las sucursales de origen existentes, antes de pasar al nuevo repositorio, de lo contrario, todas sus sucursales de origen no aparecerán en El nuevo origen. Haga esto manualmente rastreando o revisando cada rama, o use el único revestimiento:
Este comando 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:
A continuación, si está cambiando de origen, reemplace el enlace al origen anterior y apunte a un nuevo control remoto. Asegúrese de crear primero el nuevo control remoto, utilizando la GUI de bitbucket / github, pero no agregue ningún archivo o habrá un problema de fusión. P.ej
Ahora empuja. Tenga en cuenta que el segundo comando también es necesario para insertar las etiquetas:
fuente
Solución sin codificación
originen la configuraciónUse lo siguiente en su gitconfig global
Esto empuja todas las ramas y todas las etiquetas
¿Por qué NO deberías codificar
originen la configuración?Si codifica:
originun control remoto en todos los repositorios. Por lo tanto, no podrá agregar origen, pero debe usarloset-url.originya existe (desde el punto 1) recuerde :)El git moderno ya se ocupa de la recuperación
Según la respuesta de Jakub Narębski:
fuente