Poda automática con Git fetch o pull

Resuelto Edmondo asked hace 11 años • 4 respuestas

Si alguien eliminó una rama remota porque el trabajo terminó y no lo sé, no lo haré git fetch --pruney eventualmente haré retroceder la rama eliminada.

¿Existe una solución viable para obligar a Git a utilizar el modo de poda al buscar/extraer sin tener que especificarlo cada vez?

Edmondo avatar Aug 19 '13 14:08 Edmondo
Aceptado

Desde git 1.8.5 (cuarto trimestre de 2013) :

" git fetch" (por lo tanto " git pull" también) aprendió a verificar las variables de configuración " fetch.prune" y " remote.*.prune" y a comportarse como si --prunese le hubiera dado la " " opción de línea de comando.

Eso significa que, si configuras remoto.origin.prune en verdadero:

git config remote.origin.prune true

Cualquiera git fetcho git pullpodará automáticamente.

Nota: Git 2.12 (primer trimestre de 2017) solucionará un error relacionado con esta configuración, que provocaría git remote renameun mal comportamiento.
Consulte "¿ Cómo cambio el nombre de un control remoto git? ".


Ver más en el compromiso 737c5a9 :

Sin " git fetch --prune", las ramas de seguimiento remoto de una rama que el otro lado ya ha eliminado permanecerán para siempre.
Algunas personas quieren ejecutar siempre " git fetch --prune".

Para adaptarse a los usuarios que desean podar siempre o cuando obtienen desde un control remoto en particular, agregue dos nuevas variables de configuración " fetch.prune" y " remote.<name>.prune":

  • " fetch.prune" permite habilitar la poda para todas las operaciones de recuperación.
  • " remote.<name>.prune" permite cambiar el comportamiento por control remoto.

Este último naturalmente anulará el primero, y la --[no-]pruneopción de la línea de comando anulará el valor predeterminado configurado.

Dado que --prunees una operación potencialmente destructiva (Git aún no mantiene registros de referencias eliminadas), no queremos podar sin el consentimiento de los usuarios, por lo que esta configuración no estará activada de forma predeterminada.

VonC avatar Sep 10 '2013 12:09 VonC

git config --global fetch.prune true

Para siempre --prunepara git fetchy git pullen todos tus repositorios de Git:

git config --global fetch.prune true

Este comando anterior agrega en su configuración global de Git (normalmente ~/.gitconfig) las siguientes líneas. Úselo git config -e --globalpara ver su configuración global.

[fetch]
    prune = true

git config remote.origin.prune true

Para siempre --prunepero desde un único repositorio:

git config remote.origin.prune true
                 #^^^^^^
                 #replace with your repo name

Este comando anterior agrega en su configuración local de Git (normalmente .git/config) la última línea a continuación. Úselo git config -epara ver su configuración local.

[remote "origin"]
    url = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
    fetch = +refs/heads/*:refs/remotes/origin/*
    prune = true

También puede usarlo --globaldentro del segundo comando o usarlo --localdentro del primer comando.


git config --global gui.pruneDuringFetch true

Si lo utilizas git guitambién te puede interesar:

git config --global gui.pruneDuringFetch true

que anexa:

[gui]
    pruneDuringFetch = true

Referencias

La documentación correspondiente de git help config:

--global

  Para opciones de escritura: escriba en ~/.gitconfigun archivo global en lugar de en el repositorio .git/config, escriba en $XDG_CONFIG_HOME/git/configun archivo si este archivo existe y el ~/.gitconfigarchivo no.

 

--local

  Para opciones de escritura: escriba en el .git/configarchivo del repositorio. Este es el comportamiento predeterminado.

 

fetch.prune

  Si es verdadero, buscar se comportará automáticamente como si la --pruneopción se hubiera dado en la línea de comando. Ver también remote.<name>.prune.

 

gui.pruneDuringFetch

  "verdadero" si git-gui debe podar las ramas de seguimiento remoto al realizar una búsqueda. El valor predeterminado es "falso".

 

remote.<name>.prune

  Cuando se establece en verdadero, la recuperación desde este control remoto de forma predeterminada también eliminará cualquier referencia de seguimiento remoto que ya no exista en el control remoto (como si la --pruneopción se hubiera dado en la línea de comando). Anula fetch.prunela configuración, si la hay.

oHo avatar Nov 28 '2016 10:11 oHo

Si lo desea siempre prune, fetchle puedo sugerir que utilice Alias .

Simplemente escriba git config -epara abrir su editor y cambiar la configuración para un proyecto específico y agregar una sección como

[alias]
pfetch = fetch --prune   

El momento de buscar con git pfetchla poda se hará automáticamente.

ThanksForAllTheFish avatar Aug 19 '2013 07:08 ThanksForAllTheFish