ما الأساليب التي تستخدمها مواقع الويكي لدمج التعديلات المتزامنة؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

إذا قام مستخدمان بتحرير نفس موضوع الويكي، ما هي الأساليب التي تم استخدامها في مواقع الويكي (أو في برامج التحرير التعاونية المماثلة) لدمج تعديلات المستخدم الثاني مع الأول؟

أريد حلاً وهو:

  • لا يتطلب القفل
  • لا تفقد أي إضافات إلى الصفحة.
  • وقد يضيف نصًا "نموذجيًا" إضافيًا للإشارة إلى مكان إجراء التغييرات المختلفة.

(أنا مهتم بالحل الذي يمكن استخدامه للتنفيذ فكرة صوت المستخدم هذه لتجاوز سعة المكدس.)

هل كانت مفيدة؟

المحلول

تويكي يدمج تلقائيا التعديلات المتزامنة.

يسمح TWiki بإجراء عدة تعديلات متزامنة لنفس الموضوع، ثم يقوم بدمج التغييرات المختلفة تلقائيًا.ربما لن تلاحظ حدوث ذلك إلا إذا كان هناك تعارض لا يمكن دمجه تلقائيًا.في هذه الحالة، قد ترى TWiki يُدرج "علامات تغيير" في النص لتسليط الضوء على التعارضات بين تعديلاتك وتعديلات شخص آخر.يتم استخدام علامات التغيير هذه فقط إذا قمت بتحرير نفس الجزء من الموضوع مثل شخص آخر، وهي تشير إلى الشكل الذي كان يبدو عليه النص، وما هي تعديلات الشخص الآخر، وما هي تعديلاتك.

سوف يحذرك TWiki إذا حاولت تحرير موضوع يقوم شخص آخر بتحريره.سيتم تحذيرك أيضًا إذا كان الدمج مطلوبًا أثناء الحفظ.

كان هناك أيضا بعض توثيق من تلك الميزة التي يتم تطويرها بالتفصيل كيف ستتصرف.

المبادئ الأساسية التي استخدمتها في ترميز خوارزمية الدمج هي:

  1. إذا كان من الممكن الدمج دون استخدام علامات التعارض، فقم بذلك.
  2. إذا كان من الممكن الدمج باستخدام علامات التعارض، فقم بذلك.
  3. إذا لم يكن من الممكن الدمج، فستفوز عملية تسجيل الوصول الأحدث.

تجدر الإشارة إلى أن TWiki لديه ميزة مشابهة لـ Stack Overflow لطي المراجعات اللاحقة بواسطة نفس المستخدم خلال فترة زمنية معينة وهذا تسبب في حدوث خطأ عند حدوثه بالتزامن مع عملية الدمج.

  1. يقوم المستخدم أ بتحرير الموضوع
  2. يقوم المستخدم "أ" بحفظ المراجعة N
  3. يقوم المستخدم "ب" بتحرير الموضوع، ويلتقط المراجعة N
  4. يقوم المستخدم "أ" بتحرير الموضوع مرة أخرى، ويلتقط المراجعة N
  5. يقوم المستخدم "أ" بحفظ التغييرات؛يرى الحفظ أن التغيير موجود داخل ReplceIfEditiedWithin؟نافذة او شباك، لذلك لا يزيد عدد المراجعة
  6. يحفظ المستخدم B، ويرى الكود ذلك لم يتغير رقم المراجعة الموجود على القرص منذ أن بدأوا التحرير لذلك لا يكتشف الحاجة إلى الدمج.

ومن الجدير بالذكر أيضًا أن TWiki سيحذر المستخدم الثاني من أن الموضوع قيد التحرير:

لذلك اخترعت مفهوم "عقود الإيجار".عندما يتم تحرير موضوع، يتم تأجير الموضوع لفترة زمنية محددة (ساعة واحدة افتراضية).إذا حاول شخص آخر التعديل، فسيتم إخباره بوجود عقد إيجار بالفعل حول الموضوع، لكن هذا لا يمنعه من التعديل.إنه ليس قفلًا، بل مجرد وسيلة لتقديم المشورة لهم.لا يزال الدمج هو آلية الحل الرئيسية؛عقد الإيجار استشاري بحت.إذا اختار مستخدم - أو مكون إضافي - التراجع عن موضوع ما لأن شخصًا ما لديه عقد إيجار له، حسنًا، فهذا يعود إلى المكون الإضافي.

التعليق الوصفي في 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 تعثرت أيضًا تحرير التزامن والذي يبدو أنه أ تحرير SubEtha محرر متعدد المستخدمين متزامن قائم على المستعرض.يبدو أنه تم التخلي عنه في سبتمبر 2007 تقريبًا، ولكن هناك كود مصدر متاح للتنزيل.

من أجل التوثيق: دوكوويكي يضع قفلًا لمدة 15 دقيقة على الصفحات المحررة، والذي يتم تجديده عندما تقوم بمعاينة تعديلاتك (على سبيل المثال.15 دقيقة من بداية المعاينة أو التحرير).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top