¿Qué métodos utilizan los wikis para combinar ediciones simultáneas?

StackOverflow https://stackoverflow.com/questions/223040

  •  03-07-2019
  •  | 
  •  

Pregunta

Si dos usuarios editan el mismo tema de wiki, ¿qué métodos se han utilizado en wikis (o en un software de edición colaborativo similar) para combinar las ediciones del segundo usuario con la primera?

Me gustaría una solución que:

  • no requiere bloqueo
  • no pierde ninguna adición a la página.
  • Puede agregar " placa de caldera " texto para indicar dónde se realizaron diferentes cambios.

(Estoy interesado en una solución que podría usarse para implementar esta idea de uservoice para el desbordamiento de pila.)

¿Fue útil?

Solución

TWiki se fusiona automáticamente Ediciones simultáneas .

  

TWiki permite múltiples ediciones simultáneas del mismo tema, y ??luego combina los diferentes cambios automáticamente. Probablemente ni notará que esto ocurra a menos que haya un conflicto que no pueda fusionarse automáticamente. En este caso, puede ver que TWiki inserta " marcas de cambio " en el texto para resaltar los conflictos entre sus ediciones y las de otra persona. Estas marcas de cambio solo se usan si edita la misma parte de un tema que otra persona, e indican cómo se veía el texto, cuáles fueron las ediciones de la otra persona y cuáles fueron sus ediciones.

     

TWiki le avisará si intenta editar un tema que otra persona está editando. También avisará si se requirió una fusión durante un guardado.

También hubo una documentación de esa característica que se está desarrollando y que detalla cómo se comportaría.

  

Los principios básicos que utilicé para codificar el algoritmo de fusión fueron:

     
      
  1. Si es posible fusionar sin usar marcadores de conflicto, hazlo.
  2.   
  3. Si es posible combinar mediante marcadores de conflicto, hazlo.
  4.   
  5. Si no es posible fusionar, entonces gana el registro más reciente.
  6.   

Vale la pena señalar que TWiki tiene una función similar al Desbordamiento de pila para colapsar las revisiones subsiguientes del mismo usuario dentro de un cierto límite de tiempo y esto provocó un error al ocurrir junto con una combinación .

  
      
  1. El usuario A edita el tema
  2.   
  3. El usuario A guarda la revisión N
  4.   
  5. El usuario B edita el tema, selecciona rev N
  6.   
  7. El usuario A edita nuevamente el tema, selecciona rev N
  8.   
  9. El usuario A guarda los cambios; guardar ve que el cambio está dentro de ReplceIfEditiedWithin? la ventana, no incrementa el número de revoluciones
  10.   
  11. El usuario B guarda, el código ve que el número de revoluciones en el disco no ha cambiado desde que comenzaron a editar , por lo que no detecta la necesidad de fusionar.
  12.   

También vale la pena señalar que TWiki avisará al segundo usuario de que el tema se está editando:

  

Así que inventé el concepto de " arrendamientos " ;. Cuando se edita un tema, se toma una concesión sobre el tema por un período de tiempo fijo (valor predeterminado de 1 h). Si alguien más intenta editar, se les dice que ya existe una concesión sobre el tema, pero eso no les impide editar. No es un candado, es solo una forma de aconsejarlos. La fusión sigue siendo el principal mecanismo de resolución; El contrato de arrendamiento es puramente asesor. Si un usuario, o un complemento, decide alejarse de un tema porque alguien tiene un contrato de arrendamiento, bueno, eso depende del complemento.

     

El comentario descriptivo en TWiki.cfg es el siguiente:

   # When a topic is edited, the user takes a "lease" on that topic.
   # If another user tries to also edit the topic while the lease
   # is still active, they will get a warning. The warning text will
   # be different depending on whether the lease has "expired" or
   # not i.e. if it was taken out more than LeaseLength seconds ago.

tenga en cuenta que la terminología de arrendamiento es solo para desarrolladores, no para usuarios finales.

Otros consejos

Mi experiencia con la mayoría del software Wiki (por ejemplo, MediaWiki) es que rastrea la versión del documento que estás editando. Si el documento cambia durante su edición de tiempo, se rechazará su cambio y se le solicitará que realice una combinación manual.

Puedes escribir un " bloqueo " en otra tabla de la base de datos con el ID del usuario y la hora y elimine el " bloqueo " (eso no es un bloqueo real para aquellos que no entienden) cuando la persona guarda o después de x minutos.

De esta manera, cuando alguien intenta editar y alguien ya lo está haciendo. Puede aparecer un mensaje con el tiempo restante O simplemente informando que alguien más está editando la publicación.

Bueno, podrías usar un algoritmo de fusión, como el que usa el software de control de fuente. Probablemente querrá que verifique los cambios a nivel de párrafo, para ayudar a mantener la legibilidad.

Si hubiera un conflicto potencial (por ejemplo, dos usuarios que editaban el mismo párrafo), probablemente necesitaría presentar ambas versiones con texto repetitivo y / o notificar a los remitentes segundo y posteriores que el contenido de su publicación puede haber cambiado. Lo que enviaron.

Bueno, ahora creo que esa sería una idea terrible, terrible. Seamos honestos: la fusión es bastante arriesgada en el código, y al menos tiene elementos que podrían estar aislados. No hagas esto, la inteligencia humana siempre será mejor. En su lugar, está intentando reemplazarlo con una solución automática que puede dar como resultado una salida que no sea sana, sin ningún beneficio.

Al investigar la respuesta de TWiki, también me topé con SynchroEdit que parece ser un SubEthaEdit editor multiusuario simultáneo basado en navegador de estilo. Parece que pudo haberse abandonado en septiembre de 2007, pero hay un código fuente disponible para descargar.

Por el bien de la documentación: DokuWiki coloca un bloqueo de 15 minutos en las páginas editadas, que se renueva cada vez que previsualice sus ediciones (es decir, a 15 minutos de su vista previa o inicio de edición).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top