Introducción
git init convierte un directorio común en un repositorio Git. Crea un directorio oculto .git que contiene toda la contabilidad de Git: objetos, refs, configuración y hooks. El árbol de trabajo (tus archivos normales) no cambia.
Inicializando un proyecto
mkdir my-project
cd my-project
git init
# Initialized empty Git repository in /home/ada/my-project/.git/
Desde Git 2.28 puedes establecer el nombre del branch inicial en la línea de comandos:
git init --initial-branch=main
# o forma corta
git init -b main
Qué acaba de pasar
Inspecciona el nuevo directorio:
ls -a
ls .git
Verás HEAD, config, description, hooks/, info/, objects/ y refs/. Aún no hay nada commiteado; HEAD apunta a un branch no nacido.
Tu primer commit
- Crea un archivo:
echo "# My Project" > README.md - Stagea:
git add README.md - Commit:
git commit -m "Initial commit"
echo "# My Project" > README.md
git add README.md
git commit -m "Initial commit"
git log --oneline
Repositorios bare
Los servidores normalmente alojan repositorios bare sin árbol de trabajo. Usa --bare:
git init --bare project.git
Los repos bare son el destino de los pushes; no editas archivos en ellos directamente.
Reinicialización
Ejecutar git init de nuevo en un repo existente es seguro; reaplica las plantillas y muestra "Reinitialized existing Git repository". No elimina commits.
Plantillas
Por defecto git init siembra .git/hooks/ desde /usr/share/git-core/templates/. Puedes sobrescribir el directorio de plantillas para inyectar tus propios hooks, un .gitignore predeterminado o una descripción en cada nuevo repo:
git init --template=~/.git-templates
git config --global init.templateDir ~/.git-templates
Así es como las organizaciones distribuyen hooks pre-commit estándar a cada nuevo clon sin que cada desarrollador copie archivos manualmente.
Nombre del branch inicial
Muchos proyectos han pasado de master a main como nombre del branch predeterminado. La elección es local a tu repo, pero coincidir con el predeterminado de tu proveedor de hosting evita confusión al hacer push por primera vez. Configúralo una vez globalmente y olvídate: git config --global init.defaultBranch main.
Dónde Git deja de buscar
Git localiza el repositorio subiendo por el árbol de directorios hasta encontrar un directorio o archivo .git. La búsqueda se detiene en los límites del sistema de archivos por defecto (core.discoveryAcrossFilesystem lo cambia). La variable de entorno GIT_DIR sobrescribe el descubrimiento por completo; GIT_WORK_TREE establece un árbol de trabajo no predeterminado. Juntas te permiten operar sobre un repo cuyo .git está en una ubicación inusual:
GIT_DIR=/srv/repos/widget.git GIT_WORK_TREE=/var/www git status
Errores comunes
Ejecutar git init en tu directorio home por accidente, lo que pone tu colección entera de dotfiles bajo una raíz de repositorio masiva. Siempre verifica pwd primero. Otro error: borrar .git para "empezar de nuevo" mientras conservas trabajo no commiteado. Eso está bien, pero date cuenta de que todo el historial se pierde para siempre. Finalmente, no hagas commit de binarios grandes en un repo recién inicializado sin escribir antes un .gitignore; te arrepentirás cuando el repo se infle. Ejecuta git status justo después de git init para ver lo que Git planea rastrear antes de stagear nada.