¿Por qué los usuarios de Git dicen que Subversion no tiene todo el código fuente localmente?

23

Solo voy a lo que he leído en SO, así que perdóname, pero todo lo que leo dice que una de las principales ventajas de Git sobre Subversion es que Git le da todo el código fuente al desarrollador localmente, sin tener que hacer nada en el servidor.

Con mi uso limitado de SVN y TortoiseSVN, tenía todo el código fuente, o al menos pensé que lo tenía. Por ejemplo, tengo un sitio web. Lo subo a SVN. Todavía estoy ejecutando mi sitio web localmente, ¿no? Si alguien envía un cambio y no estoy conectado, no importaría si tuviera Git o no, hasta que me vuelva a conectar al servidor.

No entiendo. No estoy pidiendo una repetición de uno frente al otro, excepto este punto.

johnny
fuente
2
No es que tenga todo su código fuente localmente, es que tiene todo el historial del repositorio localmente. Esto hace que todas las interacciones del repositorio que no sean la sincronización del servidor sean mucho más rápidas.
stonemetal

Respuestas:

69

La premisa que estás cuestionando realmente está mal:

Una de las principales ventajas de Git sobre Subversion es que Git entrega localmente todo el código fuente al desarrollador

Con Subversion y Git tienes tu código fuente localmente. Con Git, tiene tanto su código fuente como un repositorio en su máquina local.

Es algo parecido a esto.

Subversión:

Tu código <-> El repositorio

Git:

Su código <-> Su repositorio local <-> Un repositorio remoto (... <-> otro repositorio remoto, etc.)

Una de las ventajas que obtiene de esta estructura es que aún puede usar el control de origen y enviar los cambios locales a su repositorio local sin perturbar el trabajo de otros miembros del equipo (con quienes comparte el repositorio remoto).

Con Subversion, tendría que arriesgarse a romper la construcción para otras personas o sufrir un desarrollo local prolongado sin ningún control de fuente que termine con una gran confirmación (o más probablemente una reversión).

Con Git, por otro lado, puede enviar estos cambios a su repositorio local, ver registros y diferencias o sus cambios, y solo cuando sienta que está listo para ser compartido con el equipo empuje los cambios desde el local repositorio al remoto.

Goran Jovic
fuente
10
Esta es una respuesta muy buena y realmente da en el blanco con "... arriesgarse a romper la construcción para otras personas o sufrir un desarrollo local prolongado sin ningún control de fuente ..."
Charles Sprayberry
1
@cspray: ¡Gracias! Estoy seguro de que también hay otros beneficios, pero ese es el mayor dolor que tuve con Svn.
Goran Jovic
git FTW (8 más para ir ...)
Trevor Boyd Smith
2
@DanNeely: En realidad sí, OP le preguntó sobre un reclamo que leyó en alguna parte y la respuesta es que simplemente no es cierto (vea la primera parte de mi respuesta). La segunda parte es solo una explicación de lo que probablemente quiso decir quien hizo el reclamo y por qué.
Goran Jovic
1
@Giorgio: Pruébalo y lo sabrás :) En serio, no creo que alguna vez haya logrado hacerlo sin problemas (aparte de hacer una fusión completamente manual, lo que de alguna manera frustra el propósito de la herramienta)
Goran Jovic
17

Git o Mercurial almacenan localmente todo su repositorio con todas las revisiones y ramas con nombre. Subversion solo almacena uno, generalmente la Revisión de la cabeza. Entonces, con Git y Mercurial, puede acceder al repositorio completo (es decir, su código fuente actual y su historial) incluso cuando su red se descompone con SVN, está restringido a la última revisión a la que actualizó.

Amenti
fuente
1
@Murph Gracias. Eso fue esencialmente lo que quise decir. Traté de aclarar.
Amenti
No se trata solo de si tiene una conexión de red al servidor o no; La E / S local es mucho más rápida y de menor latencia que la E / S de red, lo que hace que examinar el historial o culpar a un archivo sea mucho más rápido (advertencia de culpa TrotiseSVN "Espere, esto puede tomar varios minutos. ¡En serio!"). La desventaja es que tener todo el historial local puede requerir mucho más espacio en disco en repositorios más grandes; Esto puede ser problemático en las computadoras portátiles, ya que no puede simplemente agregar una unidad adicional para complementar un SSD más pequeño que no rompa el banco.
Dan Neely
El comentario de @ DanNeely probablemente fue razonable en 2012, pero 4 años después es casi imposible encontrar un proyecto git que pueda ocupar una parte considerable de un SSD
Igor Stoppa
7

La respuesta corta es esta: con git tienes todo tu código fuente, con subversion tienes toda la versión más reciente de tu código fuente.

Git guarda una copia del historial completo de su repositorio localmente. Con subversion todo el historial está en un servidor.

Bryan Oakley
fuente
2

Creo que a lo que te estás refiriendo es que con SVN, todas tus acciones requieren comunicación con el servidor, mientras que GIT no. Con SVN, si desea bifurcar, bifurca en el servidor y despliega esa bifurcación. Con GIT, puede crear una sucursal local sin que el "servidor" lo sepa.

Tiene razón al decir que tiene el código fuente con SVN y GIT, pero con GIT, no tiene que haber un servidor centralizado que también contenga el código fuente. Con GIT, puede ser la ÚNICA persona con el código fuente, pero aún así puede realizar todas las funciones que haría con un VCS típico.

He escuchado argumentos en contra de GIT, y creo que esto puede ayudar con su pregunta, diciendo que, dado que no está obligado a comprometerse con un repositorio central, usted es el propietario de su código fuente hasta que se haya comprometido y lo haya enviado a su servidor, si tú tienes uno. Con SVN, la única forma de tener el control de versiones es comprometiéndose con el servidor, pero con GIT, podría potencialmente mantener todo en su máquina local y, si alguno falla, "podría perder todo" a pesar de que podría fácilmente perderá todos sus cambios con SVN si no se comprometió y su HDD también se bloqueó.

David Peterman
fuente
1

diciendo que, dado que no es necesario que se comprometa con un repositorio central, usted es el propietario de su código fuente hasta que se haya comprometido y lo haya enviado a su servidor, si tiene uno. Con SVN, la única forma de tener el control de versiones es comprometiéndose con el servidor, pero con GIT, podría mantener todo en su máquina local y, si alguno falla, podría "perderlo todo" a pesar de que podría hacerlo con la misma facilidad. perderá todos sus cambios con SVN si no se comprometió y su HDD también se bloqueó.

Si presiona diariamente, entonces el riesgo debe ser pequeño. Pero si se ve obligado a comprometerse diariamente con el servidor SVN, al final del día, puede hacer todo en un solo conjunto de cambios grande, que no separa cada cambio en pequeños pasos. Con git, se le recomienda que realice varias confirmaciones pequeñas. Al empujar, si se requiere la fusión, intente fusionar y empujar. Si no puede fusionarse en este momento, puede pasar a una nueva sucursal u otro repositorio en el servidor.

linquizar
fuente