Pergunta

Se dois usuários editam o mesmo tópico wiki, que métodos têm sido utilizados em wikis (ou em software de edição colaborativa similar) para mesclar as edições do segundo usuário com o primeiro?

Eu gostaria de uma solução que:

  • não requer bloqueio
  • não perde quaisquer adições à página.
  • Pode adicionar texto extra "clichê" para indicar onde as mudanças diferentes foram feitas.

(Estou interessado em uma solução que pudesse ser usado para implementar essa idéia uservoice para estouro de pilha.)

Foi útil?

Solução

TWiki automaticamente fusões Vários edições .

TWiki permite que várias edições simultâneas do mesmo tema, e mescla as diferentes alterações automaticamente. Você provavelmente nem vai perceber que isso aconteça a menos que haja um conflito que não podem ser mescladas automaticamente. Neste caso, você pode ver TWiki inserir "marcas de mudança" no texto a conflitos de destaque entre as suas edições e outra pessoa de. Estas marcas de mudança são usadas apenas se você editar a mesma parte de um tópico como outra pessoa, e eles indicam que o texto usado para parecer, o que edições da outra pessoa eram, eo que suas edições foram.

TWiki irá avisar se você tentar editar um tema que alguém está editando. Ele também irá avisar se uma mesclagem foi necessário durante a defesa.

Houve também alguma documentação daquele recurso que está sendo desenvolvido detalhando como ele se comportaria.

Os princípios básicos que eu usei na codificação-se o algoritmo mergeing foram:

  1. Se é possível mesclar sem o uso de marcadores de conflito, fazê-lo.
  2. Se é possível mesclar usando marcadores de conflito, fazê-lo.
  3. Se não é possível junção, então o vitórias checkin recentes maioria.

É importante notar que TWiki tem um recurso semelhante ao estouro de pilha para recolher revisões posteriores pelo mesmo usuário dentro de um determinado limite de tempo e esta causou um erro quando acontecendo em conjunto com um mesclagem.

  1. O usuário A edita tema
  2. Um usuário salva rev N
  3. O usuário B edita tópico, pega rev N
  4. O usuário A edita tópico novamente, pega rev N
  5. Um usuário salva alterações; save vê que a mudança está dentro do ReplceIfEditiedWithin? janela, modo não incrementa o número rev
  6. O usuário B salva, código vê que o número rev no disco não mudou desde que começou a edição para não detectar a necessidade de mesclagem.

Também digno de nota é que TWiki irá avisar o segundo usuário que o tema está sendo editado:

Então, eu inventei o conceito de "arrendamento mercantil". Quando um tema é editado, um contrato de arrendamento é tomada sobre o tema por um período fixo de tempo (1h padrão). Se alguém tentar outra pessoa para editar, eles são informados de que já existe um contrato de arrendamento sobre o tema, mas isso não impedi-los de editar. Não é um bloqueio, é apenas uma forma de aconselhando-os. Mergeing ainda é o mecanismo de resolução de prime; a locação é meramente consultivo. Se um usuário - ou um plugin -. Escolhe a afastar-se um tópico porque alguém tem um contrato de arrendamento para fora sobre ele, bem, isso é até o plugin

O comentário descritivo em TWiki.cfg é o seguinte:

   # 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.

Note que a terminologia locação é apenas para desenvolvedores, não os usuários finais.

Outras dicas

A minha experiência com a maioria dos softwares Wiki (por exemplo MediaWiki) é que ele acompanha a versão do documento que você está editando. Se o documento muda durante o seu tempo de edição, a alteração é rejeitada e você será solicitado a executar uma mala manual.

Você pode escrever um "bloqueio" em uma outra tabela de banco de dados com o ID do usuário eo tempo e eliminar o "bloqueio" (que não é um verdadeiro bloqueio para aqueles que não entendem) quando a pessoa em Salvar ou depois de x minutos.

Desta forma, quando alguém tentar editar e alguém já está fazendo isso. Uma mensagem pode aparecer com o tempo restante ou apenas dizendo que alguém está editando o post.

Bem, você poderia usar um algoritmo de fusão, como o usado pelo software de controle de origem. Você provavelmente gostaria de torná-lo verificar as alterações no nível de parágrafo, para ajudar a manter a legibilidade.

Se houvesse um conflito potencial (por exemplo, dois usuários editando o mesmo parágrafo), você provavelmente precisa simplesmente apresentar ambas as versões com texto padrão e / ou notificar a segunda e submeteu subseqüentes que o conteúdo do seu post pode ter mudado de o que eles submetidos.

Bem, agora, eu acho que isso seria uma idéia terrível, terrível. Vamos ser honestos: a fusão é muito arriscada em código, e que pelo menos tem elementos que podem ser isoladas. Não faça isso - a inteligência humana será sempre melhor. Em vez disso você está tentando substituí-lo com uma solução automática que pode resultar em uma saída que não é sensato, para nenhum benefício.

Ao pesquisar a resposta TWiki Eu também tropeçou em SynchroEdit que parece ser um SubEthaEdit estilo navegador baseado editor multiusuário simultâneo. Parece que ele pode ter sido abandonado por volta de setembro de 2007, mas não há código fonte disponível para download.

Por amor documentação: DokuWiki coloca a 15 minutos bloquear páginas editadas, que se renova sempre que você visualizar suas edições (ie. 15 minutos de sua visualização ou edição sTART).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top