git init

En esta página, se explorará el comando git init en profundidad. Cuando termines de leerla, conocerás la funcionalidad principal y el conjunto ampliado de funciones de git init. En ella, se incluye lo siguiente:

  • Opciones y uso de git init
  • Información general sobre el directorio de .git
  •  Valores personalizados del entorno del directorio de git init
  • Comparación de git initgit clone
  • Repositorios bare de git init
  • Plantillas de git init

El comando git init crea un nuevo repositorio de Git. Puede utilizarse para convertir un proyecto existente y sin versión en un repositorio de Git o inicializar un nuevo repositorio vacío. La mayoría de los demás comandos de Git no se encuentran disponibles fuera de un repositorio inicializado, por lo que este suele ser el primer comando que se ejecuta en los proyectos nuevos.

Al ejecutar git init, se crea un subdirectorio de .git en el directorio de trabajo en uso, que contiene todos los metadatos de Git necesarios para el nuevo repositorio. Estos metadatos incluyen subdirectorios de objetos, referencias y archivos de plantilla. También se genera un archivo HEAD que apunta a la confirmación extraída.

Aparte del directorio de .git, en el directorio raíz del proyecto, se conserva un proyecto existente sin modificar (a diferencia de SVN, Git no requiere un subdirectorio de .git en cada subdirectorio).

De manera predeterminada, git init inicializará la configuración de Git en la ruta del subdirectorio de .git. Puedes cambiar y personalizar dicha ruta si quieres que se encuentre en otro sitio. Asimismo, puedes establecer la variable de entorno $GIT_DIR en una ruta personalizada para que git init inicialice ahí los archivos de configuración de Git. También puedes utilizar el argumento --separate-git-dir para conseguir el mismo resultado. Lo que se suele hacer con un subdirectorio de .git independiente es mantener los archivos ocultos de la configuración del sistema (.bashrc, .vimrc, etc.) en el directorio principal, mientras que la carpeta de .git se conserva en otro lugar.
 

Uso

En comparación con SVN, el comando git init permite crear de manera increíblemente sencilla nuevos proyectos con control de versiones. Con Git, no es necesario que crees un repositorio, importes los archivos y extraigas una copia de trabajo. Además, Git no precisa de la existencia previa de ningún servidor o privilegios de administrador. Basta con que utilices el comando cd en el subdirectorio de tu proyecto y ejecutes git init; de este modo, tendrás un repositorio de Git totalmente funcional.

git init

Transforma el directorio actual en un repositorio de Git. De esta forma, se añade un subdirectorio de .git al directorio en uso y se posibilita el inicio de un registro de las revisiones del proyecto.

git init <directory>

Crea un repositorio de Git vacío en el directorio especificado. Al ejecutar este comando, se creará un nuevo subdirectorio llamado <directory> que nada más que contendrá el subdirectorio de .git.

Si ya has ejecutado git init en el directorio de un proyecto y contiene un subdirectorio de .git, puedes volver a ejecutar git init de forma segura en el mismo directorio del proyecto. No se reemplazará la configuración de .git existente.

Comparación de git init y git clone

Una breve nota: git init y git clone pueden confundirse fácilmente. A un alto nivel, ambos pueden usarse para inicializar un nuevo repositorio de Git. Sin embargo, git clone depende de git init. El comando git clone se emplea para crear una copia de un repositorio que ya exista. De manera interna, git clone llama primero a git init para generar un nuevo repositorio. Luego, copia los datos del repositorio existente y extrae un nuevo conjunto de archivos de trabajo. Puedes obtener más información al respecto en la página de git clone.

Repositorios bare --- git init --bare

git init --bare <directory>

Inicializa un repositorio de Git vacío, pero omite el directorio de trabajo. Los repositorios compartidos siempre deberían crearse con la marca --bare (echa un vistazo al análisis que aparece más adelante). Habitualmente, los repositorios inicializados con la marca --bare terminan en .git. Por ejemplo, la versión bare de un repositorio llamado my-project debería almacenarse en un directorio denominado my-project.git.

La marca --bare crea un repositorio que no cuenta con un directorio de trabajo, lo que imposibilita la edición de archivos y la confirmación de cambios en ese repositorio. Crearías un repositorio bare para aplicar los comandos git push y git pull, pero nunca realizarías confirmaciones directamente en él. Los repositorios centrales siempre deberían crearse como repositorios bare, ya que el envío de ramas a un repositorio que no sea bare puede sobrescribir los cambios. Piensa en --bare como una forma de marcar un repositorio como una unidad de almacenamiento, en contraposición a un entorno de desarrollo. Esto significa que, para prácticamente todos los flujos de trabajo de Git, el repositorio central es de tipo bare, mientras que los repositorios locales de los desarrolladores no.

Tutorial de Git: repositorios bare

Lo más común es que  git init --bare se utilice para crear un repositorio central remoto:

ssh <user>@<host> cd path/above/repo git init --bare my-project.git

Primero, aplica el SSH en el servidor que contendrá tu repositorio central. Después, dirígete al lugar donde quieras almacenar el proyecto. Por último, usa la marca --bare para crear un repositorio de almacenamiento central. A continuación, los desarrolladores deben clonar my-project.git para generar una copia local en su máquina de desarrollo.

Plantillas de git init

git init <directory> --template=<template_directory>

Inicializa un nuevo repositorio de Git y copia los archivos de <template_directory> al repositorio.

Las plantillas te permiten inicializar un nuevo repositorio con un subdirectorio de .git predefinido. Puedes configurar una plantilla para que tenga los directorios y archivos predeterminados que se copiarán en el subdirectorio de .git del nuevo repositorio. Las plantillas de Git predeterminadas suelen ubicarse en el directorio /usr/share/git-core/templates, pero pueden encontrarse en una ruta diferente de tu equipo.

Las plantillas predeterminadas constituyen un buen ejemplo de cómo utilizar las funciones de las plantillas. Una potente función que aparece en las plantillas predeterminadas es la configuración de hooks Git. Puedes crear una plantilla con hooks Git predefinidos e inicializar tus nuevos repositorios de Git con los hooks habituales listos para usarse. Para obtener más información al respecto, consulta la página sobre los hooks Git.

Configuración

Todas las configuraciones de git init <directory> emplean el argumento <directory>. Si proporcionas el directorio con el argumento <directory>, el comando se ejecutará en él. Si este directorio no existe, se creará. Además de la configuración y las opciones ya comentadas, git init presenta otras opciones de línea de comandos. A continuación, se recoge una lista completa de ellas:

-Q

--QUIET

Solo notifica los mensajes, errores y advertencias de nivel crítico. Las demás salidas se silencian.

--BARE

Crea un repositorio bare (consulta la sección "Repositorios bare" anterior).

--TEMPLATE=<TEMPLATEDIRECTORY>

Especifica el directorio desde el que se utilizarán las plantillas (consulta la sección "Plantillas de git init" anterior).

--SEPARATE-GIT-DIR=<GIT DIR>

Crea un archivo de texto que contiene la ruta a <git dir>. Este archivo actúa como un enlace al directorio de .git. Esto resulta muy útil si quieres almacenar tu directorio de .git en una ubicación o unidad independiente de los archivos de trabajo de tu proyecto. Estos son algunos usos habituales de --separate-git-dir:

  • Para mantener los archivos ocultos de la configuración del sistema (.bashrc, .vimrc, etc.) en el directorio principal, mientras que la carpeta de .git se conserva en otro lugar.
  • Cuando tu historial de Git ocupa mucho espacio en el disco y necesitas moverlo a otro sitio de una unidad independiente de gran capacidad.
  • Cuando quieres tener un proyecto de Git en un directorio de acceso público como www:root.
     

Puedes llamar a git init --separate-git-dir en un repositorio que ya exista y el directorio de .git dir se moverá a la ruta de <git dir> especificada.

--SHARED[=(FALSE|TRUE|UMASK|GROUP|ALL|WORLD|EVERYBODY|0XXX)] 

Define los permisos de acceso del nuevo repositorio. Esto especifica qué usuarios y grupos de los que utilizan permisos de nivel de Unix pueden realizar las acciones de envío e incorporación de cambios en el repositorio.

Ejemplos

Creación de un nuevo repositorio de Git para una base de código existente

cd /path/to/code \
git init \
git add . \
git commit

Creación de un nuevo repositorio bare

git init --bare /path/to/repo.git

Creación de una plantilla de git init e inicialización de un nuevo repositorio de Git a partir de la plantilla

mkdir -p /path/to/template \
echo "Hello World" >> /absolute/path/to/template/README \
git init /new/repo/path --template=/absolute/path/to/template \
cd /new/repo/path \
cat /new/repo/path/README

¿Listo para aprender a usar Git?

Prueba este tutorial interactivo.

Comienza ahora