Back

Qué Dotfiles Deberías Commitear en Git (y Cuáles Ignorar)

Qué Dotfiles Deberías Commitear en Git (y Cuáles Ignorar)

Gestionar dotfiles en múltiples máquinas es un dolor de cabeza común para los desarrolladores. Has pasado horas perfeccionando tu configuración de shell, ajustes del editor y preferencias de herramientas, pero ¿qué archivos pertenecen al control de versiones? Más importante aún, ¿cómo los sincronizas sin exponer datos sensibles o crear una pesadilla de mantenimiento?

Este artículo compara los dos enfoques más populares de gestión de dotfiles—repositorios bare de Git y GNU Stow—mientras aborda las consideraciones críticas de seguridad que determinan qué se debe y qué no se debe commitear.

Puntos Clave

  • Nunca commitees secretos o datos sensibles en tu repositorio de dotfiles
  • Los repositorios bare de Git ofrecen un enfoque minimalista sin dependencias
  • GNU Stow proporciona mejor organización mediante symlinks y estructura modular
  • Elige según tus necesidades de complejidad y preferencias de flujo de trabajo

Qué Commitear: El Enfoque de Seguridad Primero

Antes de elegir un método de gestión, comprende qué pertenece a tu repositorio de dotfiles. La regla de oro: nunca commitees secretos.

Seguro para Commitear

  • Configuraciones de shell (.bashrc, .zshrc, .config/fish/)
  • Ajustes de editor (.vimrc, .config/nvim/)
  • Configuración de Git (.gitconfig sin credenciales)
  • Configuraciones de emulador de terminal (.alacritty.yml, .config/kitty/)
  • Ajustes de gestor de ventanas (.config/i3/, .config/sway/)
  • Configuraciones de herramientas (.tmux.conf, .config/starship.toml)

Nunca Commitear

  • Claves privadas SSH (~/.ssh/id_*)
  • Tokens de API y credenciales
  • Cadenas de conexión a bases de datos
  • Claves de licencia
  • Cookies del navegador o datos de sesión
  • Archivos de historial de comandos (.bash_history, .zsh_history)

Para archivos de configuración que mezclan ajustes públicos con secretos, usa plantillas o separa las partes sensibles en archivos fuente que permanezcan locales.

Repositorio Bare de Git: El Método Minimalista

El enfoque de repositorio bare de Git trata tu directorio home como un árbol de trabajo sin saturarlo con una carpeta .git. Este método no requiere herramientas adicionales—solo Git.

Proceso de Configuración

git init --bare $HOME/.dotfiles
alias config='git --git-dir=$HOME/.dotfiles --work-tree=$HOME'
config config --local status.showUntrackedFiles no

Gestión de Archivos

config add ~/.vimrc
config commit -m "Add vim configuration"
config push origin main

Ventajas:

  • Cero dependencias más allá de Git
  • Control de versiones directo sin symlinks
  • Funciona idénticamente en todos los sistemas tipo Unix
  • Sin ubicación de almacenamiento intermedia

Desventajas:

  • Fácil commitear accidentalmente archivos sensibles
  • Requiere disciplina con .gitignore
  • Puede interferir con otros repositorios Git en subdirectorios
  • Menos intuitivo para organizar configuraciones modulares

GNU Stow: El Enfoque Organizado

GNU Stow gestiona dotfiles mediante symlinks, manteniendo tus archivos reales organizados en un directorio dedicado mientras mantiene las rutas esperadas en tu carpeta home.

Estructura de Directorios

~/.dotfiles/
├── vim/
│   └── .vimrc
├── git/
│   └── .gitconfig
└── shell/
    ├── .bashrc
    └── .zshrc

Despliegue

cd ~/.dotfiles
stow vim git shell  # Crea symlinks en ~

Ventajas:

  • Organización clara y modular por aplicación
  • Despliegue selectivo fácil por máquina
  • Detección de conflictos incorporada
  • Soporta archivos de ignorar por paquete (.stow-local-ignore)

Desventajas:

  • Requiere instalación de GNU Stow
  • Algunas aplicaciones no manejan bien los symlinks (systemd, ciertos editores)
  • Puede romperse cuando las aplicaciones sobrescriben symlinks
  • Capa de abstracción adicional para comprender

Elegir Tu Estrategia de Gestión de Configuración

Tu elección entre repositorio bare de Git y GNU Stow depende de tus necesidades específicas:

Usa repositorio bare de Git cuando:

  • Quieres cero dependencias
  • Tus dotfiles son relativamente simples
  • Prefieres control de versiones directo
  • Te sientes cómodo con las interioridades de Git

Usa GNU Stow cuando:

  • Gestionas configuraciones complejas y modulares
  • Necesitas organización por aplicación
  • Despliegas diferentes configuraciones en diferentes máquinas
  • Prefieres estructura de directorios visual

Mejores Prácticas para la Productividad del Desarrollador

Independientemente del método elegido, sigue estas mejores prácticas de control de versiones:

  1. Usa .gitignore agresivamente: Comienza con * y permite archivos explícitamente
  2. Separa lo público de lo privado: Mantén un repositorio privado para configuraciones sensibles
  3. Documenta tu configuración: Incluye instrucciones de instalación y despliegue
  4. Prueba en un sistema limpio: Verifica regularmente tu proceso de bootstrap
  5. Usa carga condicional: Maneja configuraciones específicas del sistema operativo con elegancia

Para entornos de equipo, considera mantener un repositorio de configuración “bendecido” separado con valores predeterminados sensatos mientras permites personalización individual mediante sobrescrituras locales.

Conclusión

Tanto los repositorios bare de Git como GNU Stow resuelven efectivamente el problema de gestión de dotfiles—la elección se reduce a tus necesidades de complejidad y preferencias de herramientas. El factor crítico no es qué método eliges, sino mantener una separación estricta entre configuraciones públicas y datos sensibles. Comienza con una mentalidad de seguridad primero, elige el enfoque que coincida con tu flujo de trabajo, y tendrás un entorno portable y con control de versiones que impulsa tu productividad como desarrollador sin comprometer la seguridad.

Preguntas Frecuentes

Sí, puedes combinar ambos enfoques. Usa GNU Stow para organizar tus dotfiles en un directorio dedicado, luego inicializa ese directorio como un repositorio Git para control de versiones. Esto te da los beneficios organizacionales de Stow con el seguimiento de versiones de Git.

Crea ramas separadas para cada máquina o usa declaraciones condicionales en tus archivos de configuración. Para configuraciones de shell, verifica el hostname o variables de entorno. Muchas herramientas soportan directivas de inclusión para cargar archivos específicos de máquina que no se rastrean en Git.

Algunas aplicaciones requieren archivos reales en lugar de symlinks. Para estos casos, usa scripts de despliegue que copien archivos en lugar de vincularlos, o considera usar el método de repositorio bare de Git que funciona con archivos reales en sus ubicaciones esperadas.

No, solo commitea configuraciones específicas de aplicaciones que mantienes activamente. Muchos programas almacenan caché, estado y datos temporales en .config que no deberían estar bajo control de versiones. Sé selectivo y solo rastrea archivos de configuración que hayas personalizado.

Understand every bug

Uncover frustrations, understand bugs and fix slowdowns like never before with OpenReplay — the open-source session replay tool for developers. Self-host it in minutes, and have complete control over your customer data. Check our GitHub repo and join the thousands of developers in our community.

OpenReplay