Comportamiento pnetworkingeterminado de "git push" sin una twig especificada

Uso el siguiente command para enviar a mi twig remota:

git push origin sandbox 

Si yo digo

 git push origin 

¿eso empuja los cambios en mis otras twigs también, o solo actualiza mi twig actual? Tengo tres twigs: master , production y sandbox .

La documentation de git push no es muy clara al respecto, por lo que me gustaría aclarar esto para siempre.

¿Qué twigs y controles remotos hacen los siguientes commands de git push actualizarse exactamente?

 git push git push origin 

origin arriba es un control remoto.

Entiendo que git push [remote] [branch] empujará solo esa twig al control remoto.

Puede controlar el comportamiento pnetworkingeterminado configurando push.default en su configuration de git. De la documentation de git-config (1) :

 push.default 

Define la acción que debe tomar git push si no se proporciona refspec en la command-line, no se configura refspec en el control remoto, y ninguna de las opciones dadas en la línea de command implica ningún refspec. Los valores posibles son:

  • nothing : no empujes nada

  • matching : presione todas las twigs correspondientes

    Todas las twigs que tienen el mismo nombre en ambos extremos se consideran coincidentes.

    Este es el valor pnetworkingeterminado en Git 1.x.

  • upstream : empuje la twig actual a su twig ascendente (el tracking es un sinónimo en desuso para la stream ascendente)

  • current : empuje la twig actual a una twig del mismo nombre

  • simple : (nuevo en Git 1.7.11) como en sentido ascendente, pero se niega a presionar si el nombre de la twig ascendente es diferente del local

    Esta es la opción más segura y es ideal para principiantes.

    Esto se convertirá en el pnetworkingeterminado en Git 2.0.

Los modos simple, actual y ascendente son para aquellos que desean expulsar una sola twig después de terminar el trabajo, incluso cuando las otras twigs aún no están lists para ser expulsadas

Ejemplos de línea de command:

Para ver la configuration actual:

 git config --global push.default 

Para establecer una nueva configuration:

 git config --global push.default current 

git push origin todos los cambios en las twigs locales que tienen twigs remotas coincidentes en el origin En cuanto a git push

Funciona como git push <remote> , donde <remote> es el <remote> la sucursal actual (o origen, si no hay un control remoto configurado para la sucursal actual).

De la sección de ejemplos de la página man de git-push

Puede configurar el comportamiento pnetworkingeterminado para su git con push.default

 git config push.default current 

o si tienes muchos repositorys y quieres lo mismo para todos entonces

 git config --global push.default current 

La stream en esta configuration significa que, por defecto, solo presionarás la twig actual cuando hagas git push

Otras opciones son:

  • nada: no empujes nada
  • coincidencia: presione todas las twigs correspondientes (pnetworkingeterminado)
  • Seguimiento: empuje la twig actual a lo que sea que esté rastreando
  • actual: empuje la twig actual

ACTUALIZAR: NUEVA FORMA DE HACER ESTO

A partir de Git 1.7.11 haga lo siguiente:

 git config --global push.default simple 

Esta es una nueva configuration introducida que funciona de la misma manera que la actual y se convertirá en git desde v 2.0 según los rumores.

Acabo de asignar mi código a una twig y lo empujé a Github, así:

 git branch SimonLowMemoryExperiments git checkout SimonLowMemoryExperiments git add . git commit -a -m "Lots of experimentation with identifying the memory problems" git push origin SimonLowMemoryExperiments 

Aquí hay una información muy útil y útil sobre Git Push : Git Push: solo el consejo

El uso más común de git push es impulsar sus cambios locales a su repository público ascendente. Suponiendo que el upstream es un "origen" remoto llamado (el nombre remoto por defecto si su repository es un clon) y la twig que se actualizará a / se llama "master" (el nombre de twig pnetworkingeterminado), esto se hace con: git push origin master

git push origin impulsará los cambios de todas las sucursales locales a las sucursales coincidentes con el origen remoto.

git push origin master enviará los cambios desde la twig principal local a la twig principal remota.

git push origin master:staging enviará los cambios desde la twig principal local a la twig de transferencia remota si existe.

(Marzo de 2012)
Cuidado: esa política de " matching " pnetworkingeterminada podría cambiar pronto
(a veces después de git1.7.10 +) :

Consulte " Discuta: ¿qué debería hacer" git push "cuando no dice qué empujar? "

En la configuration actual (es decir, push.default=matching ), git push sin argumento presionará todas las twigs que existen localmente y de forma remota con el mismo nombre .
Esto generalmente es apropiado cuando un desarrollador empuja a su propio repository público, pero puede ser confuso si no es peligroso cuando se usa un repository compartido.

La propuesta es cambiar el valor pnetworkingeterminado a ' upstream ' , es decir, empujar solo la twig actual, y empujarla hacia la twig desde la que se extraería la extracción.
Otro candidato es ' current '; esto empuja solo la twig actual a la twig remota del mismo nombre.

Lo que se ha discutido hasta ahora se puede ver en este hilo:

http://thread.gmane.org/gmane.comp.version-control.git/192547/focus=192694

Las discusiones relevantes anteriores incluyen:

Para join a la discusión, envíe sus posts a: git@vger.kernel.org

Acabo de poner esto en mi sección .gitconfig aliases y amo cómo funciona:

 pub = "!f() { git push -u ${1:-origin} `git symbolic-ref HEAD`; }; f" 

Empujará la twig actual al origen con git pub u otro repository con git pub repo-name . Sabroso.

Un git push intentará enviar todas las sucursales locales al server remoto, es probable que no lo desee. Tengo un par de conveniencias para lidiar con esto:

Alias ​​"gpull" y "gpush" apropiadamente:

En mi ~ / .bash_profile

 get_git_branch() { echo `git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/'` } alias gpull='git pull origin `get_git_branch`' alias gpush='git push origin `get_git_branch`' 

Por lo tanto, ejecutar "gpush" o "gpull" presionará solo mi twig "actualmente activa".

Puede empujar la twig actual con el command

 git push origin HEAD 

(tomó de aquí )

Puede cambiar ese comportamiento pnetworkingeterminado en su .gitconfig , por ejemplo:

 [push] default = current 

Para verificar la configuration actual, ejecuta:

 git config --global --get push.default 

En lugar de usar alias, prefiero crear guiones git-XXX para poder controlarlos más fácilmente (todos nuestros desarrolladores tienen un determinado directory controlado en su ruta para este tipo de cosas).

Este script (llamado git-setpush ) configurará el valor de configuration del valor remote.origin.push en algo que solo empujará la twig actual:

 #!/bin/bash -eu CURRENT_BRANCH=$(git branch | grep '^\*' | cut -d" " -f2) NEW_PUSH_REF=HEAD:refs/for/$CURRENT_BRANCH echo "setting remote.origin.push to $NEW_PUSH_REF" git config remote.origin.push $NEW_PUSH_REF 

tenga en count que, como estamos usando Gerrit , establece el objective en refs/for/XXX para insert en una twig de revisión. También asume que el origen es tu nombre remoto.

Invocarlo luego de verificar una twig con

 git checkout your-branch git setpush 

Obviamente, podría adaptarse para hacer el pago, pero me gustan los guiones para hacer una cosa y hacerlo bien

He agregado las siguientes funciones en mi file .bashrc para automatizar estas tareas. Hace git push / git pull + nombre de la twig actual.

 function gpush() { if [[ "x$1" == "xh" ]]; then cat <<EOF Usage: gpush git: for current branch: push changes to remote branch; EOF else set -x local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"` git push ${bname} set +x fi } function gpull() { if [[ "x$1" == "xh" ]]; then cat <<EOF Usage: gpull git: for current branch: pull changes from EOF else set -x local bname=`git rev-parse --abbrev-ref --symbolic-full-name @{u} | sed -e "s#/# #"` git pull ${bname} set +x fi }