2011-09-27 36 views
8

--help git pull¿Cómo 'git pull' todas las ramas fácilmente?

incorpora cambios de un repositorio remoto en la rama actual.

Extraigo el repositorio de git para ver el código sin conexión y me gusta tener el código actualizado para las diferentes ramas. ¿Cómo puedo extraer el código para todas las ramas fácilmente sin hacer un tirón para cada rama manualmente?

--todo - Obtener todos los controles remotos.

--all no ayudó.

+0

http: // stackoverflow.com/questions/4318161/can-git-pull-all-update-all-my-local-branches debería ayudar – VonC

Respuesta

8

Si el repositorio local se usa solo para lectura y ninguno de los archivos se modifica, la secuencia de comandos siguiente hará el truco.

for i in $(git branch | sed 's/^.//'); do git checkout $i; git pull; done 

Parece que no hay ningún comando equivalente de git para el mismo.

5

pull fusiona las sucursales remotas en su sucursal local actual, por lo que es probable que desconectar todas las sucursales remotas no sea lo que desea.

0

Debe fusionar cada rama individualmente. Si se fusionó en varias sucursales y más de uno de ellos tuvo conflictos de combinación, ¿cómo podría resolverse entonces al mismo tiempo?

+0

Gareth - como mencioné, utilizo git solo para visualización fuera de línea y no habrá ningún conflicto. Un comando git o script de shell puede ser suficiente para mis requisitos. –

7

Me gusta la respuesta de Praveen Sripati, pero como una función de shell y te devuelve a la rama que comenzaste.

Sólo hay que poner esto en su archivo ~/.bash_aliases:

function pull-all() { 
    START=$(git branch | grep '\*' | set 's/^.//'); 
    for i in $(git branch | sed 's/^.//'); do 
     git checkout $i; 
     git pull || break; 
    done; 
    git checkout $START; 
}; 

Con el || romperlo hace un trabajo satisfactorio sin arruinar las cosas si hay un conflicto o algo similar.

+0

¡El trabajo es perfecto, amigo! –

1

Inspirado por @cellofellow añadí a mi this.profile en Mac OS X:

function git-pull-all() { 
    START=$(git symbolic-ref --short -q HEAD); 
    for branch in $(git branch | sed 's/^.//'); do 
     git checkout $branch; 
     git pull ${1:-origin} $branch || break; 
    done; 
    git checkout $START; 
}; 

function git-push-all() { 
    git push --all ${1:-origin}; 
}; 

Las principales diferencias son:

  1. estoy recibiendo la rama actual con git branch | grep '\*' | set 's/^.//' en lugar de git branch | grep '\*' | set 's/^.//'.

  2. Puede suministrar un control remoto como parámetro, p. git-pull-all origin. Si omite el parámetro, el valor predeterminado es origen.

  3. También se ha agregado un atajo similar para enviar varias sucursales al servidor.

+0

Buen trabajo. Me gusta la opción de cambiar qué control remoto usar. – cellofellow

1

Si sólo necesita la funcionalidad sin conexión, puede git fetch -all simple llamada para obtener toda la información actual. Ahora tiene toda la información en su disco y puede trabajar sin conexión. Simple fusión o compra de la sucursal en la que desea trabajar. Git pull es git fetch && git merge.