¿Un sistema de control de versiones distribuidas realmente no tiene un repository centralizado?

Puede parecer una pregunta tonta, pero ¿cómo se puede configurar una window de trabajo sin un server desde donde echarle un vistazo? ¿Y cómo mantiene una empresa una copy de respaldo segura del repository?

Supongo que debe haber un informe central … pero ¿cómo exactamente se 'distribuye'? Siempre he pensado en una distinción server-cliente (SVN) Vs peer-2-peer (GIT), pero no creo que eso pueda ser correcto a less que herramientas como GIT dependan de la tecnología de estilo torrent.

Re: 'tecnología de estilo torrente': confunde 2 problemas, uno de topología de networking (punto a punto frente a server / cliente) y otro de autoridad del server. Esto es comprensible porque los términos son casi idénticos. Pero no hay nada acerca del control de fuente distribuida que haga ningún requisito en el model de connection de networking; podría distribuir los sets de cambios por correo electrónico, si así lo prefiere. Lo importante con el control de versión distribuida es que cada persona esencialmente ejecuta su propio server y combina los cambios desde los otros serveres. Por supuesto, debe poder get su copy inicial desde algún lugar, y cómo sabe dónde está ese "lugar" que está fuera del scope del sistema en sí. No hay ningún progtwig de "seguimiento" ni nada, normalmente alguien tiene un repository público en algún lugar con la dirección publicada en un website. Pero una vez que lo ha clonado, su copy es una copy completa que puede ser la base del clon de otra persona.

¿Un sistema de control de versiones distribuidas realmente no tiene un repository centralizado?

No existe un repository central obligatorio , solo por convención. La mayoría de los proyectos tienen un repository central, pero cada repository es igual en el sentido de que tienen el historial completo, y pueden empujar y juntar parches entre ellos.

Una forma de pensar en ello es que un VCS centralizado se fija en una topología en estrella: un concentrador central actúa como el server con el repository completo, con uno o más clientes suspendidos. Por lo general, los clientes solo tienen una copy del último pago limpio y un historial limitado (si corresponde). Entonces, la mayoría de las operaciones requieren un viaje de ida y vuelta al server. La ramificación se logra creando twigs dentro de un repository.

En un VCS distribuido, no hay límite para la topología de su networking. En teoría, puede tener cualquier forma que desee. Puede tener un repository por equipo o subproyecto por separado, y compromisos de etapa. Puede tener un repository estable y un repository inestable, y muchas twigs de características, y así sucesivamente. Y no hay distinción cliente / server: todos los nodos son iguales. Cada repository es autónomo y completo, y puede impulsar y / o extraer los cambios de cualquier otro. Para comenzar, clone un repository existente (haga que su propia copy funcione) y comience a hacer cambios. Una vez que haces tu primer commit, efectivamente tienes una twig. Afortunadamente, por lo general, es muy fácil fusionar sus cambios cuando haya terminado.

Pero lo que normalmente sucede es que tiene un repository que se encuentra en un server central, lo que hace que sea más fácil para las personas comenzar, y para realizar un seguimiento de dónde están los últimos cambios.

¿Cómo se establece una configuration de área de trabajo sin un server desde el que se pueda realizar el control?

Su repository tiene que comenzar en alguna parte con un tree fuente. Entonces siempre hay un primer repository, con la serie inicial de checkins. Digamos que quieres trabajar en Murky . Debería clonar el repository, que le proporciona un repository completo propio, con todo el historial y los loggings. Realiza algunos cambios (creando así una twig), y cuando termina, empuja sus cambios hacia atrás, donde se fusionan. Ambos sistemas actúan como pares, y empujan y jalan sets de cambios entre sí.

Tanto Mercurial como Git mantienen el repository en un subdirectory oculto, por lo que el tree de directorys contiene tanto su copy de trabajo (que puede estar en el estado que desee) como el repository en sí.

¿Y cómo mantiene una empresa una copy de respaldo segura del repository?

Como se mencionó anteriormente, simplemente tiene un repository principal nominado que tiene todos los cambios fusionados más recientes y lo respalda como cualquier otra cosa. Incluso puede tener múltiples repositorys de respaldo, o tener clones automatizados en cajas separadas físicamente. De alguna manera, la copy de security es más fácil.

Supongo que debe haber un informe central … pero ¿cómo exactamente se 'distribuye'? Siempre he pensado en una distinción server-cliente (SVN) Vs peer-2-peer (GIT), pero no creo que eso pueda ser correcto a less que herramientas como GIT dependan de la tecnología de estilo torrent.

No se distribuye en el sentido de que diferentes clientes tienen diferentes partes, como el intercambio de files punto a punto. Realmente está en contraste con el model centralizado.

Todos los repositorys DVCS son ciudadanos de primera class. Se convierte en una cuestión social o directiva sobre cómo organizarlos, en lugar de un problema técnico.

Hay una distinción importante que hacer aquí: ¿hay un server central técnico , o hay uno por convención ?

Técnicamente, todos los clones de un repository de git son equivalentes. Todos ellos permiten cambios, check-ins, sucursales, fusión entre ellos. No hay un solo repository que de alguna manera sea "más cierto" que cualquier otro.

Por convención social, la mayoría de los proyectos que usan git tienen un repository central que se considera el repository autorizado, que representa el estado oficial del proyecto.

Compare eso con un VCS más tradicional como SVN: aquí el repository central es técnicamente muy diferente del pago local que cada desarrollador puede tener. El check-out local solo puede hacer operaciones VCS en relación con el repository central. Sin el repository central, el desarrollador no puede comprometerse.

Con el control de versión distribuida, puede tener una copy completa de todo el historial (el repository completo) embedded como parte de su copy local (desprotegida).

Además , la mayoría de los proyectos tendrán algún repository central que también tendrá una copy de todo. Esto significa que en algún momento tendrá que enviar sus cambios desde su repository local al central. Pero también significa que puede trabajar de manera local al contenido de su corazón, y luego solo presionar los cambios que desea presionar, y solo necesita presionarlos cuando esté listo.

Por ejemplo, mira el kernel de Linux: mucha gente echará un vistazo a "clonar" un tree de kernel de alguna parte. Podría ser el tree de Linus, o podría ser uno de los otros treees que flotan en kernel.org o internet. Pero el tree de Linus existe tanto en kernel.org como (presumiblemente) también en la (s) computadora (s) de Linus (y las computadoras de cualquier otra persona que haya sacado de allí).

La última publicación de blog de Joel describió las ventajas (y la gran diferencia de los sistemas como Subversion) de un mejor DVCS:

Cuando administra cambios en lugar de administrar versiones, la fusión funciona mejor y, por lo tanto, puede bifurcar en cualquier momento que los objectives de su organización lo requieran, porque la fusión será un pedazo de pastel.

Así que pones una copy del tree en algún server central en alguna parte de la que otras personas puedan extraer (o en tu server privado para que tengas una copy de security) y cuando te apetezca, empujas algunos bits hasta allí. Entonces, si alguien quiere una copy, pueden clonar desde allí.

Técnicamente, DVCS no necesita repository centralizado.

En la vida real, una aplicación (por ejemplo, un kernel de Linux) debe buildse a partir de una única colección acordada de fonts antes de ser entregada.

De esta forma, DVCS no impone ninguna política de gestión de origen y deja esas decisiones a los gerentes de proyecto.

La analogía "peer-to-peer" se refiere en realidad a cómo obtienes los cambios de otro repository.

  • Con un DVCS, puede search cambios y luego elegir fusionarlos si lo desea.
  • Con un CVS, actualiza los cambios, que afectan directamente a su espacio de trabajo

Como puede get de cualquier otro repository "par" (un repository que comparte el mismo primer compromiso), puede considerar esto como un model de igual a igual , ya que:

Los pares son proveedores y consumidores de resources, en contraste con el model tradicional de cliente-server donde solo los serveres suministran y los clientes consumen.

Técnicamente no necesitas un server central: puedes intercambiar commits con tus compañeros y eso es todo.

Lógicamente (solo eche un vistazo a github.com) SIEMPRE habrá (al less) un repository central, algún tipo de "copy maestra" en la que debe confiar. Supongo que en Linux Kernel, el repository de Linus es el maestro, y finalmente se aceptan cambios, ¿no?

Creo que esto será especialmente cierto para las empresas que adopten DVCS: no dependerán de las "copys" de los desarrolladores, sino de las centralizadas, aunque, obviamente, podría haber MÁS de una copy (lo cual es muy bueno para evitar desastres también: – P, y ocurre de forma bastante natural con DVCS)