2010-02-25 8 views
21

Encuentro git docs muy críptico con respecto a este tema. Quiero hacer algo simple, pero parece que hacerlo no es simple en absoluto.¿Cómo decirle a Git que siempre saque la rama principal?

tengo la siguiente situación:

$ git remote -v 
origin git://192.168.0.49/mnt/repos 
stick /mnt/titanium/podaci/repos 

puedo usar git pull a buscar y combinar de origen, y que funciona bien:

$ git pull 
Already up-to-date. 

me puede sacar de palo como este:

$ git pull stick master 
Already up-to-date. 

Sin embargo, cuando me tire de palo sin la parte maestro, me sale este mensaje:

$ git pull stick 
From /mnt/titanium/podaci/repos 
* [new branch]  su2009 -> stick/su2009 
You asked me to pull without telling me which branch you 
want to merge with, and 'branch.master.merge' in 
your configuration file does not tell me either. Please 
name which branch you want to merge on the command line and 
try again (e.g. 'git pull <repository> <refspec>'). 
See git-pull(1) for details on the refspec. 

If you often merge with the same branch, you may want to 
configure the following variables in your configuration 
file: 

    branch.master.remote = <nickname> 
    branch.master.merge = <remote-ref> 
    remote.<nickname>.url = <url> 
    remote.<nickname>.fetch = <refspec> 

See git-config(1) for details. 

Algunas cosas me confunden aquí. ¿Qué significa "su archivo de configuración" aquí? ¿Qué archivo debo editar y qué debo escribir exactamente? ¿Cuál es el apodo en este caso?

Espero que lo que intento lograr sea muy común, pero no he podido encontrar una respuesta directa con un ejemplo.

Respuesta

26

¿Qué significa "su archivo de configuración" aquí?

El archivo de configuración de su repositorio, encontrado en .git/config en la raíz de su repositorio. (También hay un archivo de configuración global de cada usuario en ~/.gitconfig, pero que no quieren poner la configuración específica de pase-allí.)

¿Qué archivo debo editar, y qué es exactamente debo escribir?

Usted puede utilizar el programa git config para escribir la información de configuración, en lugar de introducir manualmente. Sin embargo, si desea hacerlo manualmente, simplemente abra .git/config - la sintaxis es bastante sencilla.

¿Qué es el apodo en este caso?

Apodo, en este caso, es el nombre del control remoto, por lo tanto, "pegar". No tiene que preocuparse por las opciones remote.*, ya que éstas ya se han configurado, pero debe configurar las opciones branch.*. Estas opciones le dicen a Git qué combinar al hacer un git pull desde el stick.

Supongamos que desea fusionarse en master desde stick al hacer un git pull desde stick. Puede hacerlo de esta manera:

# Sets stick as default remote for git pull. 
# Note that origin will no longer be the default remote for git pull! 
$ git config branch.master.remote stick 

# Automatically merge in stick's master branch when doing a git pull 
$ git config branch.master.merge refs/heads/master 

Así que ahora, cuando se hace una git pull sin ningún tipo de información a distancia o refspec, que va a buscar a todas las ramas de palo, y se funden en rama principal del palo.Tenga en cuenta que el origen será no ya sea el control remoto predeterminado; para fusionarse en la rama principal del origen, tendrá que usar git pull origin master.

Si no desea cambiar el control remoto predeterminado para pegar, tendrá que continuar usando git pull stick master.

+1

Su última oración es crucial. Esperaba que hubiera alguna forma de solucionar ese problema. –

+0

No conozco ni una sola rama. .remote' y 'branch. .merge' trabajo de la mano, y cada rama solo puede tener una lista 'remota'. – mipadi

+0

Bueno, supongo que es solo la forma en que funciona Git. Tal vez envíe una solicitud de funciones a los desarrolladores si alguna vez me pone de los nervios demasiado (lo cual no es muy probable que suceda). Respuesta aceptada –

Cuestiones relacionadas