Intentando aprender sobre la historia de SCM / revisión / restaurar algorithms, especialmente GIT

Estoy tratando de search resources sobre cómo los algorithms de control de versiones operan con los datos, y estoy especialmente interesado en la forma en que funciona el mecanismo de git. Me doy count de que git hace muchas cosas diferentes, pero en particular me interesa cómo se guarda y restaura la historia. Agradecería cualquier enlace o reference de artículo a quien me pueda señalar. Gracias 🙂

Si sabes cómo usar git y qué es lo que hace, pero te da curiosidad cómo hacerlo , luego explora gitcore-tutorial para empezar, muestra qué objects están almacenados dentro del repository de git, cómo almacena las próximas revisiones, qué es revisión y cómo hágalo manualmente, cómo se conectan las revisiones, etc.

Esta presentación también es útil en términos de mostrar cómo funciona todo. Fue creado por el desarrollador de la página de git-scm y una de las cosas de github , por lo que sabe de lo que habla.

El libro de Pro Git tiene un capítulo sobre aspectos internos que podría ser útil.

http://progit.org/book/ch9-0.html

En realidad, no entra en detalles sobre la estructura de los packages de files, pero abarca bastante todo lo demás. Si quiere saber sobre packfile y las estructuras de índice del package, lo he cubierto aquí en detalle.

Lo único que esa página no cubre son los algorithms delta reales, pero afaik que en realidad no está cubierto en ninguna parte. Si tienes curiosidad, puedo explicarlo, sin embargo.

La historia (de un proyecto) en Git es bastante simple. Git está basado en una instantánea de nivel conceptual, lo que significa que la historia de un proyecto en el caso más simple de la historia lineal es una cadena de versiones posteriores de un proyecto.

La versión única de un proyecto está representada por commit object , que contiene información sobre state (snapshot) de todo el proyecto en una versión determinada (revisión), metadatos de la versión como date de creación de una información de comit and author, y apunta a cero o más versiones anteriores dado uno se basa en. Las versiones en las que se basa la confirmación se denominan confirmaciones principales . Entonces, para la historia lineal, sería una list de confirmaciones (que representan versiones / revisiones), cada una de ellas es la última (llamada a veces una confirmación raíz) que apunta a la confirmación anterior / principal. También hay un puntero de sugerencia de bifurcación que hace reference a la confirmación más reciente (última versión en una bifurcación determinada) y HEAD que indica qué bifurcación es la sucursal actual.

En situaciones más complicadas, el historial es DAG (Gráfico acíclico dirigido) de versiones , donde cada versión está representada por un object de confirmación con cero o más padres que apuntan a otros objects de confirmación (otras versiones).


Además de los artículos ya recomendados, me gustaría señalar dos más:

  • La input de blog de Git Parable, de Tom Prestn-Werner, describe cómo pudo haber evolucionado Git y describió bastante bien el layout de Git.
  • Git de abajo hacia arriba por John Wiegley.

hay muchos resources en la Web, como este artículo

Si está interesado en mercurial, el libro mercurial es un gran recurso . El documento original de Matt Mackall en OLS también es bueno.