Skip to content

Latest commit

 

History

History
349 lines (266 loc) · 11.8 KB

File metadata and controls

349 lines (266 loc) · 11.8 KB

Git-Hooks-Multicuenta-Windows

License: MIT Windows Git Language PRs Welcome

Starter kit profesional para configurar Git en Windows 11/10 con múltiples cuentas (GitHub personal + GitLab laboral) usando claves SSH, hooks automáticos y estandarización segura.


🎯 Casos de Uso

1. Clonación Inicial de Repositorio

Situación: Vas a empezar a trabajar en un nuevo repositorio Solución: Usa git-clone-secure

git-clone-secure git@github.com:usuario/repo.git

✅ Beneficios:

  • Configura automáticamente la identidad correcta según el host
  • Instala todos los hooks necesarios
  • Crea el archivo .env con configuración básica
  • Todo listo para empezar a trabajar de forma segura

2. Validación de Identidad

Situación: Quieres asegurarte de que siempre commits con la identidad correcta Solución: Instala pre-commit.bat y post-checkout.bat

install-hooks.bat
# Selecciona opciones 1 y 2

✅ Beneficios:

  • Verifica la identidad antes de cada commit
  • Configura automáticamente la identidad al cambiar de rama
  • Previene commits accidentales con identidad incorrecta

3. Protección de Ramas

Situación: Quieres evitar push directo a ramas protegidas Solución: Instala pre-push.bat

install-hooks.bat
# Selecciona opción 3

✅ Beneficios:

  • Protege ramas como main, master y develop
  • Previene push directo a ramas protegidas
  • Mantiene la integridad del repositorio

4. Estandarización de Commits

Situación: Quieres mantener un formato consistente en los mensajes de commit Solución: Instala prepare-commit-msg.bat

install-hooks.bat
# Selecciona opción 4

✅ Beneficios:

  • Formatea automáticamente los mensajes de commit
  • Detecta el tipo de cambio según la rama
  • Mantiene un historial de commits consistente

🔄 Ciclo de Vida del Commit

graph LR
    A[Clonar Repositorio] --> B[post-checkout.bat]
    B --> C[git add]
    C --> D[prepare-commit-msg.bat]
    D --> E[pre-commit.bat]
    E --> F[git commit]
    F --> G[pre-push.bat]
    G --> H[git push]
Loading

Cada hook actúa en una etapa específica del ciclo de vida:

  1. post-checkout.bat:

    • Se ejecuta al cambiar de rama
    • Asegura que la identidad sea correcta desde el inicio
    • Configura automáticamente el email y nombre de usuario
  2. prepare-commit-msg.bat:

    • Se ejecuta antes de crear el mensaje de commit
    • Estandariza el formato del mensaje
    • Añade prefijos según el tipo de cambio
  3. pre-commit.bat:

    • Se ejecuta justo antes del commit
    • Verifica que la identidad sea la correcta
    • Previene commits con identidad incorrecta
  4. pre-push.bat:

    • Se ejecuta antes de hacer push
    • Valida las reglas de push
    • Protege ramas importantes

🗂️ Estructura del Proyecto

Git-Hooks-Multicuenta-Windows/
├── hooks/
│   ├── pre-commit.bat           # Hook: valida identidad antes de commit
│   ├── post-checkout.bat        # Hook: configura identidad al cambiar rama
│   ├── pre-push.bat            # Hook: valida reglas antes de push
│   └── prepare-commit-msg.bat   # Hook: estandariza mensajes de commit
├── scripts/
│   ├── install-hooks.bat       # Instala hooks de manera selectiva
│   ├── git-clone-secure.bat    # Clona repo + configura hooks
│   └── lang.bat                # Sistema de mensajes multilingüe
├── config/
│   └── ssh-config-example     # Plantilla para ~/.ssh/config
├── .env.example                 # Plantilla de archivo .env (no sensible)
├── .gitignore                   # Ignora archivos .env locales
└── README.md                    # Este documento

🚀 Instalación rápida

  1. Clona este proyecto en tu máquina: C:\git-tools\Git-Hooks-Multicuenta-Windows
  2. Copia .env.example como .env y ajusta tus correos y hosts reales.
  3. Configura tu SSH usando config/ssh-config-example como base.
  4. (Opcional) Agrega C:\git-tools\Git-Hooks-Multicuenta-Windows\scripts al PATH de Windows.

🔐 Flujo de uso normal

# 1. Clonar de forma segura (recomendado)
$ git-clone-secure git@github.com:usuario/proyecto.git

# 2. O clonar normalmente y configurar después
$ git clone git@github.com:usuario/proyecto.git
$ cd proyecto
$ install-hooks.bat

# 3. Trabajar normal
$ git add .
$ git commit -m "Mi commit"
$ git push

✅ Los hooks validarán automáticamente:

  • Identidad correcta antes de cada commit
  • Configuración de identidad al cambiar de rama
  • Reglas antes de hacer push
  • Formato de mensajes de commit

⚖️ Descripción de Scripts y Hooks

🔹 install-hooks.bat

  • Instala hooks de manera selectiva mediante menú interactivo
  • Opciones disponibles:
    1. pre-commit: verifica identidad antes de commit
    2. post-checkout: configura identidad al cambiar rama
    3. pre-push: valida reglas antes de push
    4. prepare-commit-msg: estandariza mensajes de commit
    5. Todos los hooks
  • Detecta automáticamente el idioma del sistema
  • Muestra mensajes en español, inglés o chino según la configuración regional

🔹 git-clone-secure.bat

  • Clona un repositorio y configura automáticamente:
    • Crea archivo .env básico si no existe
    • Configura identidad inicial según el host
    • Ejecuta el instalador de hooks
  • Usa el sistema de mensajes multilingüe

🔹 pre-commit.bat

  • Detecta el host remoto del proyecto
  • Verifica el user.email configurado
  • Aborta el commit si la identidad no es la esperada
  • Muestra mensajes en el idioma del sistema

🔹 post-checkout.bat

  • Se ejecuta automáticamente al cambiar de rama
  • Configura la identidad correcta según el host
  • Configura nombre de usuario si no está definido
  • Maneja repositorios sin remoto de forma silenciosa

🔹 pre-push.bat

  • Valida reglas antes de hacer push
  • Protege ramas específicas (main, master, develop)
  • Previene push directo a ramas protegidas
  • Muestra mensajes en el idioma del sistema

🔹 prepare-commit-msg.bat

  • Estandariza mensajes de commit
  • Detecta tipo de cambio según la rama
  • Aplica formato: "tipo: mensaje"
  • Tipos soportados: feat, fix, release, chore

🔹 lang.bat

  • Sistema de mensajes multilingüe (español, inglés, chino)
  • Detecta automáticamente el idioma del sistema
  • Proporciona mensajes claros y consistentes
  • Maneja errores y advertencias de forma robusta

🔹 .env y .env.example

  • .env contiene tu configuración sensible (no se sube a GitHub)
  • .env.example muestra la estructura que debe tener tu .env
  • Variables soportadas:
    EMAIL_GITHUB=tuemail@personal.com
    EMAIL_GITLAB=tuemail@empresa.com
    GITLAB_HOST=gitlab.empresa.com

🛏️ Flujo Visual de Decisiones

graph TD
    A[Clonar Repositorio] --> B{Tiene hooks?}
    B -- No --> C[Ejecutar install-hooks.bat]
    B -- Sí --> D[OK]
    C --> D
    D --> E{Identidad correcta?}
    E -- No --> F[Configurar identidad]
    E -- Sí --> G[git add . -> git commit -m msg]
    F --> G
    G --> H[git push]
    H --> I{Reglas de push?}
    I -- No --> J[Push abortado]
    I -- Sí --> K[Push exitoso]
Loading

🌐 Configurar scripts en el PATH

  1. Agrega C:\git-tools\Git-Hooks-Multicuenta-Windows\scripts al PATH.
  2. Verifica en terminal:
git-clone-secure
install-hooks
  1. Uso habitual:
# Clonar y configurar todo automáticamente
git-clone-secure git@github.com:usuario/repo.git

# O instalar hooks en proyecto existente
cd mi-proyecto
install-hooks

🤔 Consideraciones y Buenas Prácticas

  • Mantén tu .env actualizado si cambian tus correos o host
  • Usa git-clone-secure para nuevos repositorios
  • Usa install-hooks para proyectos existentes
  • Los hooks se pueden instalar individualmente según necesidades
  • Trabaja siempre vía SSH (no HTTPS) para garantizar el correcto uso de claves
  • Los mensajes se mostrarán automáticamente en tu idioma del sistema
  • Si necesitas forzar un idioma específico, puedes modificar la variable LANG en lang.bat

❓ Preguntas Frecuentes (FAQs)

Configuración Inicial

Q: ¿Necesito hacer git init después de clonar con git-clone-secure?
A: No, git-clone-secure inicializa automáticamente el repositorio Git. El comando git init solo es necesario para repositorios nuevos que no han sido clonados.

Q: ¿Por qué usar SSH en lugar de HTTPS?
A: SSH proporciona una autenticación más segura mediante claves criptográficas, elimina la necesidad de introducir credenciales repetidamente y es el método recomendado para entornos profesionales.

Hooks y Automatización

Q: ¿Qué sucede si intento hacer commit con una identidad incorrecta?
A: El hook pre-commit verificará automáticamente tu identidad y abortará el commit si no coincide con la configuración esperada para el host del repositorio.

Q: ¿Necesito configurar manualmente mi identidad Git?
A: No, los hooks pre-commit y post-checkout configuran automáticamente tu identidad según el host del repositorio (GitHub o GitLab) basándose en tu archivo .env.

Solución de Problemas

Q: ¿Qué hacer si el instalador de hooks muestra errores de codificación?
A: Asegúrate de que todos los archivos .bat estén guardados en codificación UTF-8 con BOM. El script utiliza chcp 65001 para manejar caracteres especiales.

Q: El instalador muestra "Script:" no se reconoce como comando. ¿Qué hago?
A: Este error indica un problema de codificación del archivo. Asegúrate de que autosetidentity.bat esté guardado con codificación UTF-8 con BOM. Si el error persiste, los hooks se instalarán correctamente y podrás configurar tu identidad manualmente con git config user.email tu@email.com.

Q: ¿Cómo verificar que los hooks están funcionando correctamente?
A: Intenta hacer un commit. Si los hooks están instalados correctamente, verás mensajes de verificación de identidad y, en caso de error, recibirás notificaciones específicas.

Seguridad y Buenas Prácticas

Q: ¿Es seguro almacenar mis emails en el archivo .env?
A: Sí, el archivo .env está incluido en .gitignore y no se sube al repositorio. Sin embargo, asegúrate de mantenerlo actualizado si cambian tus correos.

Q: ¿Cómo protege el sistema las ramas principales?
A: El hook pre-push previene automáticamente los push directos a ramas protegidas (main, master, develop), manteniendo la integridad del repositorio.


📜 Licencia

Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.

En resumen: Puedes usar, copiar, modificar, fusionar, publicar, distribuir, sublicenciar y/o vender copias del software libremente, siempre que incluyas el aviso de copyright original.


🤝 Contribuir

¡Las contribuciones son bienvenidas! Por favor, lee nuestra Guía de Contribución para conocer el proceso.

Formas de Contribuir

  • 🐛 Reportar bugs
  • 💡 Sugerir nuevas características
  • 📝 Mejorar la documentación
  • 🔧 Enviar pull requests
  • ⭐ Dar una estrella al proyecto

📞 Soporte

¿Encontraste un problema o tienes una pregunta?

  1. Revisa la sección de FAQs
  2. Busca en los Issues existentes
  3. Crea un nuevo Issue si es necesario


Disfruta de un entorno de desarrollo seguro, automatizado y sin errores de identidad 🚀.