Какие методы используют вики-сайты для объединения одновременных правок?

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

  •  03-07-2019
  •  | 
  •  

Вопрос

Если два пользователя редактируют одну и ту же тему вики, какие методы использовались в вики (или в аналогичном программном обеспечении для совместного редактирования) для объединения правок второго пользователя с правками первого?

Я бы хотел найти решение, которое:

  • не требует блокировки
  • не теряет никаких дополнений к странице.
  • Он может добавить дополнительный "шаблонный" текст, чтобы указать, где были внесены различные изменения.

(Меня интересует решение, которое можно было бы использовать для реализации эта идея пользовательского голоса для переполнения стека.)

Это было полезно?

Решение

ТВики автоматическое слияние Одновременные изменения.

TWiki допускает несколько одновременных правок одной и той же темы, а затем автоматически объединяет различные изменения.Вы, вероятно, даже не заметите, что это происходит, если только не возникнет конфликт, который не может быть объединен автоматически.В этом случае вы можете увидеть, как TWiki вставляет "метки изменений" в текст, чтобы подчеркнуть конфликты между вашими правками и правками другого человека.Эти метки изменений используются только в том случае, если вы редактируете ту же часть темы, что и кто-то другой, и они указывают, как выглядел текст раньше, каковы были правки другого человека и каковы были ваши правки.

TWiki предупредит, если вы попытаетесь отредактировать тему, которую редактирует кто-то другой.Он также предупредит, требовалось ли слияние во время сохранения.

Там также было несколько Документация из этой разрабатываемой функции с подробным описанием того, как она будет вести себя.

Основными принципами, которые я использовал при написании алгоритма слияния, были:

  1. Если возможно объединить без использования маркеров конфликта, сделайте это.
  2. Если возможно объединить с помощью маркеров конфликта, сделайте это.
  3. Если объединение невозможно, то выигрывает самая последняя проверка.

Стоит отметить, что TWiki имеет функцию, аналогичную Stack Overflow, для сворачивания последующих ревизий одним и тем же пользователем в течение определенного срока, и это вызвал ошибку при выполнении в сочетании со слиянием.

  1. Пользователь A редактирует тему
  2. Пользователь A сохраняет обороты N
  3. Пользователь B редактирует тему, выбирает rev N
  4. Пользователь A снова редактирует тему, поднимает rev N
  5. Пользователь A сохраняет изменения;save видит, что изменение находится внутри replceifeditied within?окно, таким образом, число оборотов не увеличивается
  6. Пользователь B сохраняет, код видит, что номер версии на диске не изменился с тех пор, как они начали редактировать так что не обнаруживает необходимости в слиянии.

Также стоит отметить, что TWiki предупредит второго пользователя о том, что тема редактируется:

Так я изобрел концепцию "аренды".Когда тема редактируется, она арендуется на определенный период времени (по умолчанию 1 час).Если кто-то другой пытается отредактировать, ему говорят, что по теме уже есть договор аренды, но это не останавливает его от редактирования.Это не блокировка, это просто способ дать им совет.Слияние по-прежнему является основным механизмом разрешения споров;договор аренды носит чисто рекомендательный характер.Если пользователь - или плагин - решает отказаться от темы, потому что кто-то ее арендует, что ж, это зависит от плагина.

Описательный комментарий в TWiki.cfg выглядит следующим образом:

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

обратите внимание, что терминология аренды предназначена только для разработчиков, а не для конечных пользователей.

Другие советы

Мой опыт работы с большинством вики-программ (напримерMediaWiki) заключается в том, что он отслеживает версию документа, который вы редактируете.Если документ изменится во время вашего редактирования, ваше изменение будет отклонено, и вам будет предложено выполнить слияние вручную.

Вы можете записать "блокировку" в другую таблицу базы данных с идентификатором пользователя и временем и удалить "блокировку" (это не настоящая блокировка для тех, кто не понимает) при сохранении пользователя или через x минут.

Таким образом, когда кто-то пытается отредактировать, а кто-то уже делает это.Сообщение может появиться по истечении оставшегося времени или просто с сообщением о том, что кто-то другой в данный момент редактирует сообщение.

Ну, вы могли бы использовать алгоритм слияния, подобный тому, который используется программным обеспечением для управления версиями.Вероятно, вы захотите заставить его проверять наличие изменений на уровне абзаца, чтобы помочь сохранить удобочитаемость.

Если бы существовал потенциальный конфликт (напримердва пользователя редактируют один и тот же абзац), вам, вероятно, потребуется просто представить обе версии шаблонным текстом и / или уведомить второго и последующих отправителей о том, что содержание их публикации, возможно, изменилось по сравнению с тем, что они отправили.

Ну что ж, теперь я думаю, что это была бы ужасная, ужасная идея.Давайте будем честны:слияние довольно рискованно в коде, и в нем, по крайней мере, есть элементы, которые могут быть изолированы.Не делайте этого - человеческий интеллект всегда будет лучше.Вместо этого вы пытаетесь заменить его автоматическим решением, которое может привести к ненормальному результату, не приносящему никакой пользы.

Исследуя ответ TWiki, я также наткнулся на Синхроредактировать который, по-видимому, является Субэтаэдит стиль браузерного одновременного многопользовательского редактора.Похоже, что от него отказались примерно в сентябре 2007 года, но есть исходный код, доступный для скачивания.

В целях документирования: ДокуВики устанавливает 15-минутную блокировку отредактированных страниц, которая обновляется всякий раз, когда вы просматриваете свои правки (т.е.15 минут с момента начала предварительного просмотра или редактирования).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top