¿Por qué git se llama un sistema de control de fuente distribuida?

Parece que después de asignar el código al repository local, cada progtwigdor ejecutará el command.

git push origin master 

para empujar el file local a un determinado server remoto. No es diferente con el model de cliente / server, excepto una copy local, entonces ¿por qué se llama una "distribuida"?

Herramientas como CVS y SVN ofrecen un model de repository centralizado. Todos comprometen sus cambios en el mismo repository central. Cada committer guarda una copy de la última versión del repository central. Cuando realizan cambios, envían el cambio al repository principal.

Las limitaciones aquí son que siempre necesita tener el último código en su repository local, y para ver el historial de cambios necesitará pedirle esa información al server. También siempre debe poder acceder al repository remoto para confirmar.

Un SCN distribuido puede emular este model, pero ofrece mucho más. En lugar de tener solo un repository central al que envíe los cambios, cada committer tiene su propio repository que tiene el historial de confirmación completo del proyecto. No necesita conectarse a un repository remoto, el cambio solo se registra en su repository local. Todavía puede presionar a un repository centralizado pero no es necesario .

(Fuente: Control de versión pragmática usando Git por Travis Swicegood)

Un gran beneficio de esto es que puede iniciar un repository en cualquier momento en su computadora local. En general, cuando empiezo un nuevo proyecto voy a iniciar y comenzar a enviar actualizaciones de inmediato. Más adelante, si decido que quiero compartir este proyecto con otro desarrollador, puedo configurar fácilmente un repository centralizado al que ambos podamos acceder. O puede que nunca salga de mi computadora pero tendré el control de versión local en su lugar y puedo ver fácilmente mi historial de confirmaciones.

Otro gran beneficio (quizás less con la computación en nube ahora) es la networkingundancia. Si se pierde una copy del repository por cualquier razón, cualquiera de los otros repositorys contendrá el historial completo, por lo que solo podría perder cualquier trabajo desde su última push .

Hay más información en Wikipedia: control de revisión distribuida

También recomendaría el libro de progtwigdores pragmáticos antes mencionado sobre Git.

Respuesta corta

No es diferente con el model de cliente / server, excepto una copy local, entonces ¿por qué se llama una "distribuida"?

En el diagtwig siguiente, alice y david pueden interactuar porque los sistemas están distribuidos .

Control de versiones distribuidas

Control distribuido

Observe cómo, por ejemplo, Alice y David pueden interactuar porque cada uno puede actuar como un server.

Control de versión central

Control central

Aquí el equipo de desarrollo solo interactúa con el server principal.


Respuesta larga

Tradicionalmente hablando, los sistemas de control de fuente estaban diseñados como configuraciones server-cliente, en términos generales. Entonces el repository estaba ubicado en el centro .

Con git y Mercurial, el sistema está diseñado para poner a todos los usuarios en igualdad de condiciones. Todos tienen el repository completo con ellos. El control y el repository de esa manera se distribuyen entre sus usuarios.

Debido a que su clon puede ser el maestro de otra persona, y puede empujar su clon hacia cualquier otro repository. No hay necesidad de un concepto de un maestro "verdadero"; puede ejecutarlo como una grilla distribuida de repositorys.

Se llama distribuido porque cada directory de trabajo de git contiene un repository completo que contiene el historial completo del tree. Esto también significa que en realidad no necesita acceso a la networking para el desarrollo porque su tree puede ser esencialmente el tree maestro.

Verifique la definición de un sistema distribuido y compárelo con lo que hace / permite hacer Git … Creo que es una coincidencia … un enfoque cliente / server necesita por definición una "copy definitiva / de reference" que no es la caso con Git y similares …