Acerca del control de versiones
¿Qué es el control de versiones, y por qué debería importarte? El
control de versiones es un sistema que registra los cambios realizados
sobre un archivo o conjunto de archivos a lo largo del tiempo, de modo
que puedas recuperar versiones específicas más adelante. Para los
ejemplos de este libro llevarás control de versiones de código fuente,
aunque en realidad puedes hacer esto con casi cualquier tipo de archivo
que encuentres en un ordenador.
Si eres diseñador gráfico o web, y quieres mantener cada versión de
una imagen o diseño (algo que sin duda quieres), un sistema de control
de versiones (Version Control System o VCS en inglés) es una elección
muy sabia. Te permite revertir archivos a un estado anterior, revertir
el proyecto entero a un estado anterior, comparar cambios a lo largo del
tiempo, ver quién modificó por última vez algo que puede estar causando
un problema, quién introdujo un error y cuándo, y mucho más. Usar un
VCS también significa generalmente que si fastidias o pierdes archivos,
puedes recuperarlos fácilmente. Además, obtienes todos estos beneficios a
un coste muy bajo.
Una breve historia de Git
Como muchas de las grandes cosas en esta vida, Git comenzó con un
poco de destrucción creativa y encendida polémica. El núcleo de Linux es
un proyecto de software de código abierto con un alcance bastante
grande. Durante la mayor parte del mantenimiento del núcleo de Linux
(1991-2002), los cambios en el software se pasaron en forma de parches y
archivos. En 2002, el proyecto del núcleo de Linux empezó a usar un
DVCS propietario llamado BitKeeper.
En 2005, la relación entre la comunidad que desarrollaba el núcleo de
Linux y la compañía que desarrollaba BitKeeper se vino abajo, y la
herramienta dejó de ser ofrecida gratuitamente. Esto impulsó a la
comunidad de desarrollo de Linux (y en particular a Linus Torvalds, el
creador de Linux) a desarrollar su propia herramienta basada en algunas
de las lecciones que aprendieron durante el uso de BitKeeper. Algunos de
los objetivos del nuevo sistema fueron los siguientes:
- Velocidad
- Diseño sencillo
- Fuerte apoyo al desarrollo no lineal (miles de ramas paralelas)
- Completamente distribuido
- Capaz de manejar grandes proyectos como el núcleo de Linux de manera eficiente (velocidad y tamaño de los datos)
Entonces, ¿qué es Git en pocas palabras? Es muy importante asimilar
esta sección, porque si entiendes lo que es Git y los fundamentos de
cómo funciona, probablemente te sea mucho más fácil usar Git de manera
eficaz. A medida que aprendas Git, intenta olvidar todo lo que puedas
saber sobre otros VCSs, como Subversion y Perforce; hacerlo te ayudará a
evitar confusiones sutiles a la hora de utilizar la herramienta. Git
almacena y modela la información de forma muy diferente a esos otros
sistemas, a pesar de que su interfaz sea bastante similar; comprender
esas diferencias ayudará a evitar que te confundas a la hora de usarlo.
Instantáneas, no diferencias
La principal diferencia entre Git y cualquier otro VCS (Subversion y
compañía incluidos) es cómo Git modela sus datos. Conceptualmente, la
mayoría de los demás sistemas almacenan la información como una lista de
cambios en los archivos. Estos sistemas (CVS, Subversion, Perforce,
Bazaar, etc.) modelan la información que almacenan como un conjunto de
archivos y las modificaciones hechas sobre cada uno de ellos a lo largo
del tiempo,
Git no modela ni almacena sus datos de este modo. En cambio, Git modela
sus datos más como un conjunto de instantáneas de un mini sistema de
archivos. Cada vez que confirmas un cambio, o guardas el estado de tu
proyecto en Git, él básicamente hace una foto del aspecto de todos tus
archivos en ese momento, y guarda una referencia a esa instantánea. Para
ser eficiente, si los archivos no se han modificado, Git no almacena el
archivo de nuevo —sólo un enlace al archivo anterior idéntico que ya
tiene almacenado
Todo en Git es verificado mediante una suma de comprobación antes de
ser almacenado, y es identificado a partir de ese momento mediante dicha
suma (checksum en inglés). Esto significa que es imposible cambiar los
contenidos de cualquier archivo o directorio sin que Git lo sepa. Esta
funcionalidad está integrada en Git al más bajo nivel y es parte
integral de su filosofía. No puedes perder información durante su
transmisión o sufrir corrupción de archivos sin que Git sea capaz de
detectarlo.
El mecanismo que usa Git para generar esta suma de comprobación se
conoce como hash SHA-1. Se trata de una cadena de 40 caracteres
hexadecimales (0-9 y a-f), y se calcula en base a los contenidos del
archivo o estructura de directorios en Git. Un hash SHA-1 tiene esta
pinta:
24b9da6552252987aa493b52f8696cd6d3b00373
Verás estos valores hash por todos lados en Git, ya que los usa con
mucha frecuencia. De hecho, Git guarda todo no por nombre de archivo,
sino en la base de datos de Git por el valor hash de sus contenidos.
Los tres estados
Ahora presta atención. Esto es lo más importante a recordar acerca de
Git si quieres que el resto de tu proceso de aprendizaje prosiga sin
problemas. Git tiene tres estados principales en los que se pueden
encontrar tus archivos: confirmado (committed), modificado (modified), y
preparado (staged). Confirmado significa que los datos están
almacenados de manera segura en tu base de datos local. Modificado
significa que has modificado el archivo pero todavía no lo has
confirmado a tu base de datos. Preparado significa que has marcado un
archivo modificado en su versión actual para que vaya en tu próxima
confirmación.
Esto nos lleva a las tres secciones principales de un proyecto de
Git: el directorio de Git (Git directory), el directorio de trabajo
(working directory), y el área de preparación (staging area).
El directorio de Git es donde Git almacena los metadatos y la base de
datos de objetos para tu proyecto. Es la parte más importante de Git, y
es lo que se copia cuando clonas un repositorio desde otro ordenador.
El directorio de trabajo es una copia de una versión del proyecto.
Estos archivos se sacan de la base de datos comprimida en el directorio
de Git, y se colocan en disco para que los puedas usar o modificar.
El área de preparación es un sencillo archivo, generalmente contenido
en tu directorio de Git, que almacena información acerca de lo que va a
ir en tu próxima confirmación. A veces se denomina el índice, pero se
está convirtiendo en estándar el referirse a ello como el área de
preparación.
El flujo de trabajo básico en Git es algo así:
- Modificas una serie de archivos en tu directorio de trabajo.
- Preparas los archivos, añadiendo instantáneas de ellos a tu área de preparación.
- Confirmas los cambios, lo que toma los archivos tal y como están en el área de preparación, y almacena esa instantánea de manera permanente en tu directorio de Git.
Si una versión concreta de un archivo está en el directorio de Git,
se considera confirmada (committed). Si ha sufrido cambios desde que se
obtuvo del repositorio, pero ha sido añadida al área de preparación,
está preparada (staged). Y si ha sufrido cambios desde que se obtuvo del
repositorio, pero no se ha preparado, está modificada (modified). En el
Capítulo 2 aprenderás más acerca de estos estados, y de cómo puedes
aprovecharte de ellos o saltarte toda la parte de preparación.
Fuente:http://git-scm.com
Fuente:http://git-scm.com



No hay comentarios.:
Publicar un comentario