Tutorial Git (recetario)

Git es un sistema de control de versiones distribuido. Los clientes de Git no se descargan la última versión de los ficheros de un proyecto: sino que se bajan el repositorio completamente. Git también permite tener más de un repositorio remoto.

Git almacena los datos como instantáneas (snapshots) del proyecto a lo largo del tiempo. Para ganar en eficiencia, si los ficheros no cambian, Git no almacena el fichero otra vez — simplemente un enlace a la versión idéntica y anterior que ha sido almacenada previamente. Git no almacena los “deltas” de los ficheros cambiados. Almacena el fichero cambiado entero.

Casi todas las operaciones en Git son locales ya que toda la información histórica está en el repositorio local.

Git verifica la integridad de ficheros empleando sumas de verificación (checksums) (empleando el algoritmo SHA-1, que devuelve una representación de 40 caracteres hexadecimales en minúscula)

Casi todas las operación simplemente añaden datos a la base de datos de Git. Es muy difícil hacer que el sistema haga algo que no se pueda deshacer.

Los 3 estados
Git tiene 3 estados principales para los ficheros que tiene bajo control: entregado (committed), modificado (modified) y (preparado) staged

Entregado (commited) – los datos han sido almacenados y están seguros en la base de datos local.
Modificado (modified) – El fichero han cambiado pero no se ha entregado todavía
Preparado (staged) – Significa que has marcado un fichero modificado en su versión ACTUAL para ser entregado en la siguiente instantánea (snapshot).

Esto nos lleva a las 3 versiones principales de un proyecto Git: el directorio Git, el directorio de trabajo y el área de preparación (staging area)

Directorio Git – es donde los metadatos y los objetos de la base de datos es almacenado (directorio .git)
El directorio de trabajo – es una de las versiones de los ficheros del proyecto (instantanea) donde el usuario generalmente modifica los ficheros
El área de preparación (staging area) es un simple fichero, generalmente contenido en el directorio Git que almacena toda la información sobre la siguiente entrega de ficheros.

Así que un fichero puede estar entregado (en el directorio Git), preparado (en el área de preparación) o modificado (solo en el directorio de trabajo)