Как Wiki обрабатывает несколько одновременных редактирований?

Это всегда задерживалось подсознательно, таким образом, я полагаю, что мог бы также идти вперед и спросить.

Как Wiki обрабатывает несколько редактирований на том же содержании?

Вот упрощенный пример того, что я спрашиваю. Скажем, то, что страница имеет следующее содержание:

Я - страница!

И теперь скажем, что два идут для редактирования той страницы. Каждый человек добавляет предложение:

Человек один:

Я - страница!
Я - второе предложение на той же странице!

Человек два:

Я - страница!
Я - второе предложение!

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

Теперь скажем, тот человек, каждый отправляет их изменения перед человеком два, делает, но человек два даже не получает шанс видеть изменения тот человек один сделанный. Изменения two's человека перезаписывают те из того человека, когда он наконец идет для представления?

Существует ли разность / алгоритм слияния, который мог использоваться для этого?

12
задан knpwrs 5 August 2010 в 05:04
поделиться

4 ответа

Я считаю, что Википедия использует довольно простой алгоритм сравнения / слияния , аналогичный тому, как это делает большинство программ управления исходным кодом.

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

Однако имейте в виду, что Википедия находится на вершине шкалы одновременных пользователей. Для большинства вики, вероятно, было бы приемлемо использовать очень простой алгоритм «выигрывает последнее сохранение», когда правки второго человека просто перезаписывают правки первого человека. С добавлением истории первый человек должен легко заметить, что его изменения были перезаписаны, и добавить их снова.

Я считаю, что это решение и используется в Stack Overflow.У SO есть дополнительная функция, в которой вызов Ajax используется для уведомления редактора, если кто-то еще входит и изменяет страницу до того, как они закончили.

8
ответ дан 2 December 2019 в 21:42
поделиться

Это зависит от вкуса вики. Есть много десятков или сотен клонов вики.Обычно второй пользователь получает сообщение об ошибке «Эта страница была отредактирована другим пользователем», а затем он должен перезагрузить страницу и повторить свои изменения.

Вики, безусловно, может объединить два редактирования вместе, как это делает система контроля версий, такая как Subversion. Если вы знакомы с командой UNIX patch , она будет включать изменение редактирования пользователя 2 и создание патча, который затем применяется. Патч может быть успешным, а может и нет; в вашем примере возникнет конфликт слияния, и он вернется к старому сообщению об ошибке «эта страница была отредактирована другим пользователем, вы потеряете».

2
ответ дан 2 December 2019 в 21:42
поделиться

Может быть транзакционный механизм, который использует блокировку для предотвращения двукратного редактирования файла. См. блокировку файлов в Википедии.

1
ответ дан 2 December 2019 в 21:42
поделиться

Как вики обрабатывает несколько одновременных изменений?

Это зависит от реализации вики.

Есть ли алгоритм сравнения / слияния, который можно было бы использовать для этого?

Подойдет любой алгоритм слияния, отвечающий вашим требованиям.

Обычно это зависит от поведения, которое вам нравится в вики. Например, вы можете реализовать свою вики таким образом, чтобы изменение Человека два не фиксировалось, поскольку статья была изменена, а второй человек работает с устаревшей базовой копией. Потенциально Человек Два войдет во что-то совершенно другое, если он / она будет знать об изменениях. В этом случае вы можете запретить фиксацию изменений, внесенных вторым лицом. Этого можно достичь с помощью транзакционного механизма, о котором Курт Дюбуа упоминает в своем ответе.

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

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

Так что, если вы используете вики, я бы посоветовал делать небольшие правки.

Если вы реализуете вики, у вас есть выбор, как вы хотите, чтобы ваша вики-система вела себя.

1
ответ дан 2 December 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: