W3docs

git init

Aprende el uso, el directorio de plantillas y la configuración del comando git init, y cómo distinguirlo de git clone.

Qué hace git init

git init crea un repositorio Git nuevo y vacío, o reinicializa uno existente. Es casi siempre el primer comando de Git que se ejecuta en un proyecto, y es lo que transforma una carpeta normal en algo que Git puede rastrear.

Al ejecutarlo se crea un único subdirectorio oculto llamado .git dentro de tu proyecto. Ese directorio contiene todo lo que Git necesita para gestionar tu historial: la base de datos de objetos, las referencias (ramas y etiquetas), el puntero HEAD, la configuración y una copia de los archivos de plantilla predeterminados. Tus archivos de proyecto permanecen exactamente donde están: Git nunca los mueve ni los modifica al inicializar.

Esta página explica cómo ejecutar git init de distintas maneras, la diferencia entre un repositorio normal y uno bare, el directorio de plantillas y la lista completa de opciones. Si lo que quieres es una copia de un repositorio que ya existe en otro lugar, necesitas git clone en lugar de git init. Para una visión general de alto nivel, consulta Qué es Git.

Inicializar un repositorio

La forma más sencilla de empezar a controlar versiones de un proyecto es entrar en su directorio con cd y ejecutar el comando sin argumentos:

cd my-project
git init

Git imprime una confirmación y crea el subdirectorio .git:

Initialized empty Git repository in /home/user/my-project/.git/

También puedes pasar un nombre de directorio. Git crea ese directorio (si aún no existe) y coloca allí el nuevo repositorio:

git init my-project

El repositorio está vacío en este punto: todavía no hay confirmaciones. Los siguientes pasos habituales son preparar archivos con git add y registrarlos con git commit. Puedes comprobar el estado de tu nuevo repositorio en cualquier momento con git status.

Reinicializar un repositorio existente

Ejecutar git init dentro de un directorio que ya tiene un subdirectorio .git es seguro. Git no elimina ni sobreescribe tu historial ni tu configuración: simplemente vuelve a aplicar los archivos de plantilla que falten e informa:

Reinitialized existing Git repository in /home/user/my-project/.git/

Esto puede ser útil ocasionalmente para incorporar nuevos archivos de un directorio de plantillas actualizado.

Repositorios bare

Un repositorio bare es uno creado con el indicador --bare. Contiene el historial de Git pero no tiene directorio de trabajo: no hay archivos desprotegidos que editar, por lo que no puedes hacer commits directamente en él.

git init --bare project.git

Los repositorios bare existen para ser un lugar central compartido al que otros clones hacen push y del que hacen pull. Hacer push a un repositorio no bare puede sobreescribir los archivos en los que alguien está trabajando activamente en su directorio de trabajo, por lo que los repositorios centrales/remotos son casi siempre bare. Por convención se nombran con el sufijo .git (por ejemplo project.git).

La diferencia es visible en la estructura. Un repositorio normal oculta los archivos de Git dentro de una carpeta .git:

my-project/
├── .git/ Git's data lives here
└── (your files)

Un repositorio bare coloca ese mismo contenido directamente en el nivel superior: no hay un árbol de trabajo que lo envuelva:

project.git/
├── HEAD
├── config
├── description
├── hooks/
├── info/
├── objects/
└── refs/

Bare

Establecer el nombre de la rama inicial

Históricamente Git nombraba la primera rama master. Puedes elegir un nombre diferente en el momento de la inicialización con --initial-branch (o su forma abreviada -b):

git init --initial-branch=main

Para que este sea el valor predeterminado en cada nuevo repositorio y nunca tengas que pasar el indicador, configúralo una vez en tu configuración global:

git config --global init.defaultBranch main

Consulta git config para obtener más información sobre la configuración global.

El directorio de plantillas

Cuando Git crea el subdirectorio .git, lo inicializa a partir de un directorio de plantillas: un conjunto de archivos (como hooks de ejemplo y un archivo info/exclude) que se copian en cada nuevo repositorio. Git elige la plantilla a utilizar a partir del primero de estos que esté definido, en orden:

  • la ruta proporcionada con la opción --template,
  • la variable de entorno $GIT_TEMPLATE_DIR,
  • la variable de configuración init.templateDir,
  • el valor predeterminado integrado, normalmente /usr/share/git-core/templates.

Las plantillas predeterminadas sirven principalmente como ejemplos (por ejemplo, los hooks de muestra están deshabilitados por defecto). Al proporcionar tu propio directorio de plantillas puedes hacer que archivos y carpetas —como un conjunto estándar de hooks— se copien automáticamente en cada repositorio que inicialices.

Referencia de opciones

git init acepta un argumento opcional <directory>. Si lo omites, el comando se ejecuta en el directorio actual; si proporcionas una ruta que no existe, Git la crea. Los indicadores más útiles se muestran a continuación.

IndicadorDescripción
-q, --quietSolo imprime errores y advertencias; el resto de la salida se suprime.
--bareCrea un repositorio bare (sin directorio de trabajo).
--template=<template-directory>Especifica el directorio de plantillas del que copiar archivos al crear el repositorio.
--separate-git-dir=<git-dir>Almacena los datos reales de Git en <git-dir> y deja un pequeño archivo de texto .git que apunta a él. En un repositorio existente, el directorio .git se mueve a la nueva ruta.
--shared[=(false|true|umask|group|all|world|everybody|0xxx)]Configura el repositorio para que sea compartido entre varios usuarios, controlando los permisos de archivo del grupo.
-b <name>, --initial-branch=<name>Establece el nombre de la rama inicial en el nuevo repositorio.

git init vs. git clone

Estos dos comandos crean un repositorio local, pero parten de puntos opuestos:

  • git init convierte una carpeta local existente en un repositorio nuevo y vacío sin historial.
  • git clone descarga un repositorio remoto existente —su historial completo, ramas y archivos— y establece una conexión con ese remoto.

Usa git init cuando estés empezando un proyecto desde cero en tu máquina; usa git clone cuando te estés uniendo a un proyecto que ya reside en un servidor como GitHub.

Práctica

Práctica
¿Cuáles son las funciones y opciones del comando 'git init'?
¿Cuáles son las funciones y opciones del comando 'git init'?
Was this page helpful?