¿Cómo configuran y usan Git los desarrolladores del núcleo de Git?
(blog.gitbutler.com)- Scott Chacon, autor de "Pro Git", explica varias configuraciones de Git que tiene activadas globalmente y por qué las usa
- Muchas de esas configuraciones las aprendió de desarrolladores que realmente trabajan en el codebase central de Git
- A continuación, una configuración de
~/.gitconfigque hace que Git sea mejor[column] ui = auto [branch] sort = -committerdate [tag] sort = version:refname [init] defaultBranch = main [diff] algorithm = histogram colorMoved = plain mnemonicPrefix = true renames = true [push] default = simple autoSetupRemote = true followTags = true [fetch] prune = true pruneTags = true all = true # ¿Por qué no usarlo? [help] autocorrect = prompt [commit] verbose = true [rerere] enabled = true autoupdate = true [core] excludesfile = ~/.gitignore [rebase] autoSquash = true autoStash = true updateRefs = true # Configuraciones según preferencia personal (descoméntalas y úsalas si las necesitas) [core] # fsmonitor = true # untrackedCache = true [merge] # (si tu versión de Git es anterior a la 2.3, usa 'diff3') # conflictstyle = zdiff3 [pull] # rebase = true
¿Cómo configuran Git los desarrolladores del núcleo de Git?
- En la lista de correo de Git, Felipe Contreras alguna vez propuso al equipo central eliminar todas sus configuraciones y alias y probar Git en su estado base
- Como resultado de ese experimento, se propusieron 9 configuraciones y 3 alias como nuevos valores predeterminados
merge.conflictstyle = zdiff3 rebase.autosquash = true rebase.autostash = true commit.verbose = true diff.colorMoved = true diff.algorithm = histogram grep.patternType = perl feature.experimental = true branch.sort = committerdate - Estas configuraciones aún no se han adoptado como valores predeterminados
- Pero es interesante que muchos desarrolladores de Git tienen dificultades para usar Git sin activar algunas de ellas
- Aún más interesante es que probablemente la mayoría de ustedes no tiene idea de qué significa todo esto
- Se explicará en tres categorías
- Lo que claramente mejora Git (Clearly Makes Git Better)
- ¿Por qué demonios no? (Why the Hell Not?)
- Cuestión de gusto (A Matter of Taste)
# Lo que claramente mejora Git
Ordenar la lista de ramas
- Por defecto, Git ordena las ramas alfabéticamente, pero puede ser más útil ordenarlas por fecha del commit más reciente
- Con la siguiente configuración puedes ordenar las ramas por el commit más reciente y mostrarlas en formato de columnas
git config --global column.ui auto git config --global branch.sort -committerdate
Ordenar la lista de tags
- Si quieres ordenar los tags por versión en lugar de alfabéticamente, usa esta configuración
git config --global tag.sort version:refname
Configurar el nombre de la rama predeterminada
- Para establecer el nombre de la rama predeterminada al inicializar un nuevo repositorio, configura lo siguiente
git config --global init.defaultBranch main
Mejorar la configuración de diff
- Cambia el algoritmo de diff predeterminado a
histogrampara obtener comparaciones más precisas - Para detectar movimientos de código y mostrarlos con color, agrega esta configuración
git config --global diff.algorithm histogram git config --global diff.colorMoved plain git config --global diff.mnemonicPrefix true git config --global diff.renames true
Mejorar la configuración de push
- Puedes mejorar el comportamiento de
pushcon la siguiente configuracióngit config --global push.default simple git config --global push.autoSetupRemote true git config --global push.followTags true
Mejorar la configuración de fetch
- Para eliminar automáticamente ramas y tags innecesarios durante
fetch, usa esta configuracióngit config --global fetch.prune true git config --global fetch.pruneTags true git config --global fetch.all true
# ¿Por qué no usarlo?
Sugerencia de autocorrección
- Si quieres que detecte errores tipográficos al escribir comandos y sugiera correcciones, usa esto
git config --global help.autocorrect prompt
Ver diff al hacer commit
- Para mostrar también los cambios al escribir el mensaje del commit, agrega esta configuración
git config --global commit.verbose true
Reutilizar resolución de conflictos
- Para reutilizar automáticamente resoluciones de conflictos anteriores, usa esta configuración
git config --global rerere.enabled true git config --global rerere.autoupdate true
Configurar un archivo .gitignore global
- Si quieres indicar archivos que se ignorarán globalmente, configúralo así
git config --global core.excludesfile ~/.gitignore
Mejorar la configuración de rebase
- Para hacer automáticamente squash y stash durante
rebase, usa esta configuracióngit config --global rebase.autoSquash true git config --global rebase.autoStash true git config --global rebase.updateRefs true
# Cuestión de gusto
Mejor visualización de conflictos de merge
- Si quieres mostrar también la versión base durante un conflicto de merge, considera esta configuración
git config --global merge.conflictstyle zdiff3
Usar rebase durante pull
- Si quieres que
git pullhaga rebase automáticamente, configúralo asígit config --global pull.rebase true
Acelerar la detección de cambios en archivos
- Para mejorar el rendimiento de comandos como
git status, puedes usar esta configuracióngit config --global core.fsmonitor true git config --global core.untrackedCache true
# Cierre
- Con estas configuraciones, puedes usar Git de forma más cómoda, y varias de ellas son usadas activamente incluso por desarrolladores del núcleo
- Al optimizar la configuración de Git, puedes mejorar tu flujo de trabajo y usarlo de manera más eficiente
7 comentarios
"Lo más interesante es que la mayoría de ustedes no tiene ni idea de lo que esto significa"; da justo en el clavo. 😨
¿Es
-globaly no--global?Es
--global. Hubo un error al copiar y pegar. Ya fue corregido.¿Cómo configuran y usan Git los desarrolladores principales de Git?
Qué bueno poder reutilizar la resolución de conflictos.
Yo uso
git-deltacuando hago diff para verlo en formato TUI.Si me da flojera complicarme con esto o con aquello, entonces
tig... jajaja. ¿Habrá algo mejor?Opiniones de Hacker News
git out. Lista todos los commits que no se han hecho push. Lo uso todo el tiempogit config --global core.pager bat