2008-10-21 2 views
7

두 명의 사용자가 동일한 위키 주제를 편집하는 경우 위키 (또는 유사한 공동 편집 소프트웨어)에서 두 번째 사용자의 편집 내용을 첫 번째 항목과 병합하는 데 사용 된 방법은 무엇입니까? 동시 편집을 병합 할 때 위키는 어떤 방법을 사용합니까?

  • 페이지에있는 추가를 잃지 않는다
  • 잠금이 필요하지 않습니다

    나는 해결책을 싶습니다.

  • 다른 변경 사항이 발생한 곳을 나타내는 "상용구"텍스트가 추가 될 수 있습니다.

(I 스택 오버 플로우에 대한 this uservoice idea을 구현하는 데 사용할 수있는 솔루션에 관심이 있어요.)

답변

3

TWiki은 자동으로 Simultaneous Edits을 병합합니다.

TWiki는 동일한 주제에 대해 여러 개의 동시 편집을 허용 한 다음 자동으로 다른 변경 사항을 병합합니다. 자동으로 병합 할 수없는 충돌이 발생하지 않는 한 이런 일이 일어나지 않을 것입니다. 이 경우 TWiki가 텍스트에 "변경 표시"를 삽입하여 편집 내용과 다른 사용자의 충돌을 강조 할 수 있습니다. 이 변경 표시는 다른 사람과 주제의 동일한 부분을 편집 할 때만 사용되며 텍스트의 모양, 상대방의 편집 내용 및 편집 내용을 나타냅니다.

누군가 다른 사람이 편집중인 주제를 편집하려고하면 TWiki가 경고합니다. 또한 저장 중에 병합이 필요한지 경고합니다.

도대체 어떻게 동작하는지에 대한 세부적인 내용이 개발 된 documentation이있었습니다.

나는 mergeing 알고리즘을 코딩에 사용되는 기본 원칙이었다 :

  1. 이 충돌 마커를 사용하지 않고 병합 할 수 있다면, 그렇게.
  2. 충돌 마커를 사용하여 병합 할 수 있다면 그렇게하십시오.
  3. 병합 할 수없는 경우 가장 최근의 체크 인이 우선합니다.

그것은 위키가 특정 시간 제한이 caused a bug when happening in conjunction with a merge 내에서 동일한 사용자가 이후의 개정을 축소하기위한 스택 오버플로 비슷한 기능을 가지고 있음을 주목할 필요가있다.

  1. 사용자 A가 주제를 편집
  2. A가 사용자 B가, 주제를 편집
  3. 사용자 A가 다시 항목을 편집 레브 N을 집어 올린다 N에게
  4. 사용자 A를 집어 올린다 N을 저장
  5. 사용자 변경 사항을 저장합니다. save는 변경 사항이 ReplceIfEditiedWithin 내에 있음을 확인합니다. 창, 그렇게
  6. 사용자 B가 절약 회전 수를 증가시키지 않고, 코드는 그들이 그렇게 병합 할 필요를 감지하지 않습니다 편집을 시작한 이후 디스크 레브 번호가 변경되지 않았 음을 본다.

    그래서 내가 "리스"의 개념을 발명 : 주목할 가치가

는 위키가 화제가 편집되고 있다는 번째 사용자에게 경고하는 것입니다. 주제가 편집되면 일정 기간 (기본 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. 

참고.

0
당신은하여 사용자의 ID와 함께 다른 데이터베이스 테이블에 "잠금"을 쓸 수 있습니다

사람이 x 분 후에 저장하면 "잠금"(이해하지 못하는 사용자에게는 실제 잠금이 아닙니다)을 삭제하고 삭제하십시오.

누군가가 편집을 시도하고 이미 누군가 이렇게하면이 방법이 사용됩니다. 다른 사람이 현재 게시물을 수정하고 있음을 알리는 메시지가 남은 시간 또는 함께 표시 될 수 있습니다.

+0

다른 사용자가 편집 중임을 경고합니다. TWiki는 실제로 이와 같은 작업을 수행하므로 주제가 편집 중임을 사용자에게 경고 할 수 있습니다. 편집 및 저장을 허용하고 편집 내용을 병합하려고합니다.정말 두 편집 내용을 병합하려고하는 솔루션을 찾고 있습니다. –

2

대부분의 Wiki 소프트웨어 (예 : MediaWiki)에 대한 경험은 편집중인 문서의 버전을 추적한다는 것입니다. 시간 편집 도중 문서가 변경되면 변경 사항이 거부되고 수동 병합을 수행할지 묻는 메시지가 나타납니다.

+0

그게 하나의 대안이라고 생각합니다. 난 정말 두 편집 내용을 자동으로 병합하는 솔루션을 찾고 있어요. MediaWiki는 어떤 방법 으로든 수동 병합을 용이하게합니까? –

+1

MediaWiki는 두 버전의 전체 텍스트와 함께 사용자 버전과 마지막으로 저장된 버전 간의 차이점을 보여줍니다. 아마도이 문제는 수동으로 충돌을 해결하는 데 도움이됩니다. 편집 내용에 따라 작업을 메모장에 복사하고 다시 시작하는 것이 때때로 쉬운 경우가 있습니다. – 64BitBob

0

음, 소스 제어 소프트웨어에서 사용되는 것과 같은 병합 알고리즘을 사용할 수 있습니다. 단락 수준의 변경 사항을 확인하여 가독성을 유지하는 것이 좋습니다.

잠재적 인 충돌이있는 경우 (예 : 두 명의 사용자가 같은 단락을 편집하는 경우), 두 버전 모두를 상용구 텍스트로 표시하거나 두 번째 이후의 제출자에게 게시물의 내용이 변경되었을 수 있음을 알리는 것이 좋습니다 그들이 제출 한 것에서.

0

글쎄, 지금은 끔찍하고 끔찍한 생각이라고 생각합니다. 솔직히합시다. 병합은 코드에서 매우 까다 롭습니다. 적어도 분리 될 수있는 요소가 있습니다. 이것을하지 마십시오. 인간의 지능이 항상 나아질 것입니다. 그 대신 자동 출력으로 대체하려고합니다. 결과가 좋지 않아 출력에 도움이되지 않습니다.

+0

TWiki 솔루션은 수백 개의 TWiki 설치에서 현재 사용되고 있습니다. 그렇기 때문에 의심 스럽습니다. 대부분의 경우 충돌없이 병합 할 수 있으며, 그렇지 않은 경우 상황을 명확하게 알려주고 별도의 diff 파일을 보지 않고도 모든 내용을 편집 할 수 있습니다. –

+0

동시 편집은 StackOverflow에서 흔한 일은 아니지만 문제가 발생했을 때 수정하는 것은 귀찮습니다. (비공식 FAQ를 보았습니다.) 현재 가장 큰 문제는주의를 기울이지 않으면 일어난 것을 깨닫지 못한다는 것입니다. 이 같은 것은 적어도 당신이 그것을 다루도록 강요 할 것입니다. –

+0

여기에는 갈등이 무엇인지 알지 못합니다. 어떤 의미의 diff 알고리즘과도 충돌하지 않는 변화의 전체 공간이 기사의 의미와 충돌합니다. diff를 사용하면 사람들이 충돌을 처리하지 않고이를 마스킹 할 수 있습니다. – Marcin

0

TWiki 대답을 연구하면서 SubEthaEdit 스타일의 브라우저 기반 동시 다중 사용자 편집기 인 것으로 보이는 SynchroEdit을 우연히 발견했습니다. 2007 년 9 월경에 포기 된 것 같지만 다운로드 할 수있는 소스 코드가 있습니다.

0

문서 용 : DokuWiki 편집 된 페이지를 15 분간 잠궈 놓습니다. 편집 된 페이지는 편집 미리보기 (예 : 미리보기 또는 편집 시작부터 15 분) 할 때마다 갱신됩니다.

관련 문제