¿Qué es la carpeta .git?

¿Alguien puede explicarme cuál es la carpeta ".git"?

Se crea en el repository y qué contiene y por qué se crea?

Una de las cosas que más me gusta de Git es que mantiene toda su información en un solo lugar: su directory .git en la raíz de su proyecto. Si aún no has estado investigando, ¡no te preocupes! Hay muchas cosas buenas que se pueden tener dentro. Echemos un vistazo a los files y carpetas importantes e intentemos tener una mejor idea de lo que sucede bajo el capó.

La estructura básica se ve así:

  .
 | - COMMIT_EDITMSG
 | - FETCH_HEAD
 | - CABEZA
 | - ORIG_HEAD
 | - sucursales
 | - config
 | - descripción
 | - ganchos
 |  | - applypatch-msg
 |  | - commit-msg
 |  | - post-commit
 |  | - post-recepción
 |  | - post-actualización
 |  | - pre-applypatch
 |  | - precompromiso
 |  | - pre-rebase
 |  | - prepare-commit-msg
 |  `- actualización
 | - índice
 | - información
 |  `- excluir
 | - loggings
 |  | - CABEZA
 |  `- refs
 | - objects
 `- refs
     | - cabezas
     | - controles remotos
     | - escondite
     `- tags
  • COMMIT_EDITMSG : este es el post del último compromiso. En realidad, Git no lo usa en absoluto, pero está ahí principalmente para su reference después de que haya realizado una confirmación.
  • config : contiene configuraciones para este repository. Las variables de configuration específicas pueden includese aquí (¡e incluso con alias !). Para qué se usa más este file es definir dónde viven los controles remotos y algunas configuraciones básicas, como si el repository está vacío o no.
  • description : si usa gitweb o enciende git instaweb , esto aparecerá cuando vea su repository o la list de todos los repositorys versionados.
  • FETCH_HEAD : los SHA de las cabezas de twigs / remotas que se actualizaron durante la última git fetch
  • HEAD : la reference actual que estás viendo. En la mayoría de los casos, es probable que sea refs/heads/master
  • index : el área de ensayo con metadatos como las marcas de time, los nombres de file y también los SHA de los files que ya están envueltos por Git.
  • packed-refs : desecha las references durmientes, esta no es la list definitiva de references en su repository (¡la carpeta refs tiene las reales!) Eche un vistazo al comentario de gitster para ver más información al respecto.
  • ORIG_HEAD : Al hacer una fusión, este es el SHA de la twig en la que te estás fusionando.
  • MERGE_HEAD : Al hacer una fusión, este es el SHA de la twig de la que se está fusionando.
  • MERGE_MODE : Se utiliza para comunicar las restricciones que se otorgaron originalmente a git merge a git commit cuando una fusión entra en conflicto, y se necesita una git commit separado para concluirla. Actualmente --no-ff es la única restricción pasada de esta manera.
  • MERGE_MSG : enumera los conflictos que ocurren durante su combinación actual.
  • RENAMED-REF : Todavía RENAMED-REF intentando rastrear este. Desde un grep básico a través de la fuente, parece que este file está relacionado con errores al save refs.

También hay muchos directorys:

  • hooks : un directory que se convertirá rápidamente en tu mejor amigo: contiene scripts que se ejecutan en ciertos momentos cuando se trabaja con Git, como después de una confirmación o antes de una rebase. Una completa serie de artículos popupán sobre los ganchos.
  • info : Relativamente poco interesante, excepto por el file de exclude que vive dentro de él. Hemos visto esto antes en el artículo Ignorando files , pero como recordatorio, puede usar este file para ignorar los files de este proyecto, pero ¡cuidado! No es una .gitignore como .gitignore sería un file .gitignore .
  • logs : contiene el historial de diferentes twigs. Parece que se usa principalmente con el command de reajuste .
  • objects : el almacén interno de blobs de Git, todos indexados por SHA.
  • rebase-apply : El banco de trabajo para rebasing y para git am . Puede profundizar en su file de patch cuando no se aplica limpiamente si es valiente.
  • refs : la copy maestra de todos los refs que viven en su repository, ya sea para stashes, tags, sucursales de rastreo remoto o sucursales locales.

Solo una palabra de sabiduría cuando juegues con los internos de Git: asegúrate de saber lo que estás haciendo, y si no, ¡ten una copy de security! Meterse con los files de configuration o los ganchos es bastante simple, pero no me gustaría ir a la espesura en el almacén de datos si no fuera necesario. Si por alguna razón eres parte de tu flujo de trabajo normal, es posible que lo estés haciendo mal.

Hay mucho más sobre los aspectos internos de Git que aún no hemos cubierto. Una de las mejores guías es el Libro comunitario de Git , y por supuesto, puedes download la fuente y echar un vistazo.

la carpeta .git contiene toda la información necesaria para su proyecto en el control de la versión y toda la información sobre commits, la dirección del repository remoto, etc. Todos están presentes en esta carpeta. También contiene un logging que almacena su historial de compromisos para que pueda retroceder al historial.

Para get más información, puede consultar el website oficial de git .

Básicamente, significa que tu directory es manejado por Git (repository de Git). Si lo mueve a otro lugar (o lo elimina), se encontrará con algo como:

fatal: no es un repository de git (ni ninguno de los directorys principales): .git

cada vez que usas el command 'git *' allí.

Puede mover el directory .git a otro lugar usando:

git –git-dir = / myproject_path / myproject.git log –oneline

O:

exportar GIT_DIR = / myproject_path / myproject.git

Pero no recomiendo hacerlo. Preste atención a que es solo 1 carpeta, a diferencia de SVN.

Contiene toda la información relevante para que GIT maneje su código, como la position de HEAD, ganchos para aplicar antes / después de commit / push y algunos otros files.

Tal vez el file más "famoso" dentro es el file de configuration que contiene toda su información de sucursales.

Recomiendo leer aquí más información.