Poda automática con Git fetch o pull
Si alguien eliminó una rama remota porque el trabajo terminó y no lo sé, no lo haré git fetch --prune
y 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?
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--prune
se 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 fetch
o git pull
podará automáticamente.
Nota: Git 2.12 (primer trimestre de 2017) solucionará un error relacionado con esta configuración, que provocaría git remote rename
un 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-]prune
opción de la línea de comando anulará el valor predeterminado configurado.Dado que
--prune
es 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.
git config --global fetch.prune true
Para siempre --prune
para git fetch
y git pull
en 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 --global
para ver su configuración global.
[fetch]
prune = true
git config remote.origin.prune true
Para siempre --prune
pero 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 -e
para ver su configuración local.
[remote "origin"]
url = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
fetch = +refs/heads/*:refs/remotes/origin/*
prune = true
También puede usarlo --global
dentro del segundo comando o usarlo --local
dentro del primer comando.
git config --global gui.pruneDuringFetch true
Si lo utilizas git gui
tambié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
~/.gitconfig
un archivo global en lugar de en el repositorio.git/config
, escriba en$XDG_CONFIG_HOME/git/config
un archivo si este archivo existe y el~/.gitconfig
archivo no.
--local
Para opciones de escritura: escriba en el
.git/config
archivo del repositorio. Este es el comportamiento predeterminado.
fetch.prune
Si es verdadero, buscar se comportará automáticamente como si la
--prune
opción se hubiera dado en la línea de comando. Ver tambiénremote.<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
--prune
opción se hubiera dado en la línea de comando). Anulafetch.prune
la configuración, si la hay.
Si lo desea siempre prune
, fetch
le puedo sugerir que utilice Alias .
Simplemente escriba git config -e
para 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 pfetch
la poda se hará automáticamente.