59 puntos por GN⁺ 2024-02-17 | 4 comentarios | Compartir por WhatsApp
  • pull.ff only o pull.rebase true

    • Ambas configuraciones buscan evitar crear commits de merge por accidente cuando al ejecutar git pull la rama difiere de la rama superior.
    • pull.rebase true equivale a ejecutar git pull --rebase cada vez.
    • pull.ff only equivale a ejecutar git pull --ff-only cada vez.
    • No tiene sentido usar ambas configuraciones al mismo tiempo, ya que --ff-only sobrescribe --rebase.
  • merge.conflictstyle zdiff3

    • Una configuración que hace que los conflictos de merge sean más fáciles de leer.
    • diff3 cambia la forma en que se muestran los conflictos de merge en la configuración predeterminada para mostrar el código original en medio.
    • zdiff3 es una versión mejorada de diff3 y suele considerarse superior.
  • rebase.autosquash true

    • Una función que facilita modificar commits antiguos.
    • Si haces commit con git commit --fixup OLD_COMMIT_ID, al ejecutar git rebase --autosquash main el commit fixup! se combinará automáticamente con su objetivo.
  • rebase.autostash true

    • Ejecuta automáticamente git stash y git stash pop antes y después de git rebase.
  • push.default simple, push.default current

    • Configura que la rama actual se haga push automáticamente a una rama remota con el mismo nombre.
    • push.default simple es la configuración predeterminada y solo funciona cuando la rama ya está siguiendo una rama remota.
    • push.default current siempre hace push de la rama local a una rama remota con el mismo nombre.
  • init.defaultBranch main

    • Al crear un nuevo repositorio, crea la rama main en lugar de master.
  • commit.verbose true

    • Agrega el diff completo del commit al editor de texto donde se escribe el mensaje de commit, para ayudar a recordar qué se hizo.
  • rerere.enabled true

    • Recuerda cómo resolviste los conflictos de merge durante git rebase y los resuelve automáticamente.
  • help.autocorrect 10

    • La función de autocorrección de git detecta errores de escritura, pero no ejecuta automáticamente el comando corregido.
    • Para que se ejecute automáticamente, configura help.autocorrect como 1, 10, immediate o prompt.
  • core.pager delta

    • El "pager" usado para mostrar la salida de git diff, git log, git show, etc.
    • Configura delta como una herramienta avanzada para ver diffs con resaltado de sintaxis.
  • diff.algorithm histogram

    • El algoritmo de diff predeterminado suele causar problemas cuando cambia el orden de las funciones.
    • diff.algorithm histogram muestra esto de forma más clara.
  • core.excludesfile: .gitignore global

    • Configura un archivo global de gitignore que se aplica a todos los repositorios.
  • includeIf: configuración de git separada para lo personal y el trabajo

    • Se usa para configurar distintas direcciones de correo para repositorios personales y de trabajo.
  • url."git@github.com:".insteadOf 'https://github.com/'

  • fsckobjects: prevención de corrupción de datos

    • Una configuración que detecta activamente la corrupción de datos y que ha salvado al equipo varias veces.
  • Configuraciones relacionadas con submodules

    • status.submoduleSummary true
    • diff.submodule log
    • submodule.recurse true
  • Otras configuraciones

    • blame.ignoreRevsFile .git-blame-ignore-revs
    • branch.sort -committerdate
    • color.ui false
    • commit.cleanup scissors
    • core.autocrlf false
    • core.editor emacs
    • credential.helper osxkeychain
    • diff.tool difftastic
    • diff.colorMoved default
    • diff.colorMovedWS allow-indentation-change
    • diff.context 10
    • fetch.prune true y fetch.prunetags
    • gpg.format ssh
    • log.date iso
    • merge.keepbackup false
    • merge.tool meld
    • push.followtags true
    • rebase.missingCommitsCheck error
    • rebase.updateRefs true
  • Cómo configurarlas

    • Por lo general, se configuran con git config --global NAME VALUE.
    • Para eliminar una opción, edita manualmente ~/.gitconfig.
  • Configuraciones que cambié después de escribir este artículo

    • diff.algorithm histogram
    • branch.sort -committerdate
    • merge.conflictstyle zdiff3
  • Cierre

    • Es útil preguntarles a muchas personas cuáles son sus configuraciones favoritas y enumerar las que más se mencionan.

Opinión de GN⁺

  • Lo más importante de este artículo es que permite conocer las opciones de configuración de git que los desarrolladores usan con frecuencia.
  • Para ingenieros de software principiantes que usan git, estas configuraciones pueden ayudar a mejorar la eficiencia del trabajo y resolver problemas cotidianos.
  • En particular, configuraciones como merge.conflictstyle zdiff3 o rebase.autosquash true pueden reducir problemas en la colaboración al facilitar la resolución de conflictos de merge y la gestión del historial de commits.

4 comentarios

 
pril1 2024-02-23

También puedes usar el comando git config --global --unset NAME para eliminar una opción.

 
rumbarum 2024-02-21

Para revisar tu configuración, agrega git config --list.

 
pmc7777 2024-02-18

Me pasó que lo había configurado en mi entorno principal de desarrollo, pero en otro entorno no estaba configurado y yo me preguntaba por qué no funcionaba... jajaja. Como desarrolladores usamos Git todos los días, así que estaría bueno que hubiera más interés en todo lo relacionado con la configuración de Git.

 
GN⁺ 2024-02-17
Comentarios en Hacker News
  • Configuración de core.autocrlf y safecrlf
    • Evita hacer commit de archivos CRLF y fuerza la conversión a LF
    • Si es necesario, se puede sobrescribir con gitattributes
  • Configuración de alias en .gitconfig
    • Define alias para mostrar el historial de commits como un grafo conciso
    • Configuración tomada de una publicación de Stack Overflow
  • rebase.autosquash y alias fixup
    • Configuraciones de uso frecuente para automatizar el rebase después de hacer commits
    • pull.rebase también es importante, pero fixup se usa más seguido
  • Utilidad de la configuración insteadOf
    • Permite usar atajos al agregar remotos de GitHub
    • También se mencionan varias configuraciones como advice.statusHints, include.path, remote "origin".fetch, interactive.singleKey, entre otras
  • Ejemplo de configuración personal de .gitconfig
    • Incluye varias configuraciones de alias, tag, tar, log, pull, diff, difftool, pager, safe, advice, init
  • Configuración para usar delta como paginador
    • Muestra diferencias más legibles y con resaltado de sintaxis
    • También agrega un alias para hacer checkout a la rama por defecto
  • Configuración user.useConfigOnly para usar varios correos electrónicos
    • Después de comentar user.email, se configura el correo al hacer commit en un repositorio nuevo
  • Necesidad de cambiar el valor predeterminado de merge.conflictstyle
    • El estilo diff3 ofrece más información para resolver conflictos
  • Configuraciones adicionales
    • core.commentChar, alias.newtask, alias.zip, git checkout -, format.pretty, configuración de delta
  • Malentendido sobre la configuración branch.sort
    • En realidad ordena por la fecha del commit, no por la rama usada más recientemente
  • Otro ejemplo de configuración personal de .gitconfig
    • Configuraciones de alias.lg, alias.hist, alias.quick-push, alias.search, user, core, url
    • Es posible definir un flujo de trabajo sencillo mediante el alias quick-push

Lo anterior resume las configuraciones personales de .gitconfig que compartieron usuarios en los comentarios de Hacker News y los consejos de configuración de Git que prefieren. Estas configuraciones se enfocan en mejorar la eficiencia al usar Git, automatizar tareas específicas y mejorar la experiencia de uso.