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
-u
una vez, por ejemplogit push --all origin -u
, el seguimiento se configura y luego puede simplemente usarlogit push
.git push --tags origin
para 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 -r
ogit remote show origin
).De forma predeterminada (consulte la documentación de la
push.default
variable de configuración), empuja las ramas coincidentes , lo que significa que primero debe hacergit push origin branch
que 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/config
archivo para tener algo como lo siguiente:fuente
git push --all origin
es 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.default
essimple
.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
--global
opció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 --all
solo empuje sus ramas locales actuales a new_origin, no todas las ramas de origen.--bare
repositorio, que es un poco diferente de un repositorio normal, solo tiene los.git
archivos, no sus archivos. Es perfectamente suficiente si no vas a trabajar en él. Ver--bare
y--mirror
git-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/reponame
que 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 -a
debe 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
origin
en la configuraciónUse lo siguiente en su gitconfig global
Esto empuja todas las ramas y todas las etiquetas
¿Por qué NO deberías codificar
origin
en la configuración?Si codifica:
origin
un control remoto en todos los repositorios. Por lo tanto, no podrá agregar origen, pero debe usarloset-url
.origin
ya 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