2008-09-26 15 views
13

Basado en unas pocas publicaciones que he leído sobre el control de versiones, parece que la gente piensa que el bloqueo pesimista en un sistema de control de versiones es algo malo. ¿Por qué? Entiendo que impide que un desarrollador envíe un cambio mientras que otro tiene el archivo desprotegido, pero ¿y qué? Si sus archivos de códigos son tan grandes que constantemente tiene más de una persona trabajando en ellos al mismo tiempo, le presento que debe reorganizar su código. Divídalo en unidades funcionales más pequeñas.¿Por qué evitar el bloqueo pesimista en un sistema de control de versiones?

La integración de cambios de código concurrentes es un proceso tedioso y propenso a errores incluso con las herramientas que proporciona un buen sistema de control de versiones para facilitarlo. Creo que debería evitarse si es posible. Entonces, ¿por qué el bloqueo pesimista se desalienta?

Respuesta

7

Depende de su proyecto y equipo en general. El bloqueo pesimista es bueno porque es fácil de entender: ¡un desarrollador a la vez, y no es necesario fusionarse!

Sin embargo, lo malo de esto es exactamente eso: un desarrollador a la vez. Tengo la situación ahora donde un colega se ha ido al sitio, y antes de irse, revisó todo para que, si tuviera que corregir algún error, pudiera regresar y verificara todos los cambios en ... bueno para él , pésimo para mí y el resto del equipo de desarrollo en la base.

Si puede evitar el bloqueo pesimista en su equipo, está bien usarlo, realmente, la razón principal por la que la gente lo odia es porque es la práctica predeterminada de Visual SourceSafe. Si no está seguro de fusionar muchos cambios, entonces tiene otra razón para usarlo: si alguna vez ha utilizado un SCM con bloqueo optimista y ha combinado una fusión, sabrá lo difícil que es recuperarlo.

Si puede manejar la fusión, entonces el bloqueo optimista es superior y lo recomendaría, pero no es necesario que entregue su tarjeta geek si no desea usarla.

1

Los desarrolladores de software siempre son optimistas, ¡solo mire sus habilidades de estimación!

En la práctica, encontramos que los conflictos son raros y que los beneficios de no tener que preocuparse por bloquear superan el paso ocasional de resolución de conflictos.

+1

"Los desarrolladores de software siempre son optimistas, ¡solo mire sus habilidades de estimación!" - ¡¡Quiéralo!! – tjjjohnson

14
  1. Vaya a jugar con Source Safe y tenga un desarrollador de vacaciones de dos semanas. Agregue a eso que los administradores de VSS no están cerca. Ahora tiene una solución para publicar pero no puede debido al desarrollador
  2. Si tiene varias funciones y/o correcciones de errores en proceso. No importa cuán pequeño se rompa su código, aún tendrá contención por un archivo central.
+1

Estoy totalmente de acuerdo, Scott. – itsmatt

+0

Estoy de acuerdo, pero ¿por qué hacer referencia a SourceSafe? Lo usamos durante muchos años en el modo de pago concurrente, sin problemas. (Realmente nunca entiendo todo el odio por VSS. Creo que tuvimos suerte). –

+1

@Steve: Sí, puede hacer que VSS funcione. También puede hacer que los archivos zip funcionen, si está lo suficientemente motivado para hacerlo. VSS combinó la fusión difusa, las confirmaciones no atómicas y un sistema de cambio de reglas compuesto por etiquetas y nada más.No hace malabares con sierras de cadena, pero sí lo suficientemente peligrosas. – Shog9

2

El bloqueo pesimista es (experiencia personal) en el camino de la colaboración. A veces es reemplazado fácilmente por una buena comunicación de equipo. Simplemente diciendo "Oye, voy a trabajar en estos pocos archivos por un tiempo".

He trabajado en equipos de 2 a 6 personas sin bloqueo y nunca tuvimos un problema, más allá de algunas fusiones habituales y necesarias.

También trabajé una vez con el bloqueo en un proyecto alojado Visual SourceSafe. Fue en mi humilde opinión contraproducente.

4
  • No siempre se tiene la opción de archivos Separar
    • archivos Config
    • archivos XML
  • archivos Incluso relativamente pequeños todavía pueden contener piezas distintas que más de una desarrollador necesita acceso a
    • Bibliotecas
    • Utilidades
  • Herramientas concentración son mucho más inteligentes de lo que han sido nunca
    • Los conflictos son más bien raros
  • reduce los retrasos debido a los desarrolladores que tienen archivos "accidentalmente" desprotegido
3

Si un desarrollador no puede manejar la fusión y la solución de conflictos, debe ser reeducado.

Es común que incluso los archivos pequeños obtengan conflictos, por ejemplo, con JSP, una persona (desarrollador web) podría estar cambiando el código de diseño, y otra persona podría cambiar la API para el modelo que utiliza el JSP.

6
  1. Bob necesita para editar FooBar.java
  2. John tiene que hacerse ver para la edición de
  3. Bob edita su copia local de todos modos y lo guarda como FooBar.java.bak
  4. Cuando John comprueba su adentro, Bob comprueba hacia fuera
  5. Bob copias FooBar.java.bak sobre él y lo comprueba en
  6. John consigue volver a desarrollar su función

Lo he visto suceder una y otra vez. Los desarrolladores hacen porque este proceso es molesto:

  1. Bob necesita para editar FooBar.java
  2. John tiene que hacerse ver para la edición de
  3. Bob tiene que esperar haciendo girar los pulgares hasta que John se hace

El bloqueo pesimista se siente como hora amateur, lo siento.

+0

Bob es un verdadero idiota por no fusionarse cuando usa un paradigma de sandbox. John es un muñeco real por no solo recuperar su versión anterior del control de código fuente y fusionar sus cambios con los de Bob. – indiv

1

si los archivos de código son tan grandes que constantemente tiene más de una persona que trabaja en ellos, al mismo tiempo

Si este es el caso que es hora de 'seres humanos' para hacerse cargo y coordina cualquier cambio. En el caso ideal, y si la gestión de su proyecto es buena, rara vez llegará a un momento en el que intente cambiar un archivo bloqueado porque alguien habrá coordinado las cosas para que esto prácticamente no suceda.

En otras palabras, sabrá que "Bob" está haciendo un gran conjunto de cambios en los componentes X/Y/Z, si tiene una corrección de errores en el componente X, sabrá que debe hablar con Bob antes de intentar enviar tus cambios

Como digo esto es ideal;)

1

bloqueo pesimista es una buena idea si graves conflictos van a ser probable. Para la mayoría de los programas, no verá ningún conflicto grave, por lo que el bloqueo pesimista es bastante inútil. Excepciones a esto serían si usted es:

  • Trabajando en archivos binarios donde no se puede realmente fusionar - art assets (modelos, texturas, etc.) son un buen ejemplo.
  • Trabajar con los usuarios no técnicos que no saben cómo combinar, y no quieren aprender (en su mayoría artistas, pero algunos escritores técnicos lanzará un ajuste de esto también).
  • Utilización de archivos muy grandes, que no pueden ser fácilmente fusionado o rotos en archivos más pequeños debido al alto grado de complejidad (nunca había visto una situación como esa primera parte, pero estoy seguro de que sea posible).

De lo contrario ...

3

En cuanto al caso con Bob y John, los sistemas cooperativos como SVN no impiden este escenario no más que un sistema de bloqueo hace. Puedo 'actualizar' FooBar.java, que satisface svn que tengo la última edición, luego eliminar ese archivo localmente y sobrescribirlo con mi propia copia personal que hice sin tener en cuenta la versión de referencia, y comprobar eso, felizmente destruyendo los cambios del otro tipo. Ningún sistema, ya sea de bloqueo o no, impide esto, por lo que no veo el punto de siquiera incluirlo en el debate.

El verdadero problema es decidir lo que su saldo es de entre

probabilidad de errores de combinación de vs. molestias causadas por la gente archivos de bloqueo

La idea de que sea un sistema no-bloqueo de cierre o es "superior "es una tontería.

He usado VSS, en su modo de bloqueo completo predeterminado, con 6 desarrolladores, y funcionó como un sueño. De vez en cuando, alguien olvidaba liberar un candado y teníamos que buscarlos o romper el candado manualmente y fusionarlos a mano cuando regresaban, pero era muy mínimo. He visto svn arruinar su combinación automática más de una vez, de modo que realmente no confío en eso. No siempre marca un 'conflicto' cuando dos personas han cambiado el mismo archivo de una manera que no se puede fusionar automáticamente.
Por el contrario, he visto gente impaciente con las cerraduras de VSS, edite sus propias copias, y las revise descuidadamente en la parte superior del código de otras personas, y he visto svn me atrapan fácilmente cuando podría intentarlo accidentalmente para verificar algo que haya sido cambiado por alguien más desde la última vez que lo revisé.

Mi punto es, esto no es un debate sensato tener. El éxito de cualquiera de los sistemas se reduce a a la forma de administrar los puntos de conflicto cuando se producen, no si un sistema o el otro es mejor.

Cuestiones relacionadas