الزئبقي التحديث لا يعمل subrepo إذا subrepo ينتمي إلى اثنين من أهم اتفاقيات إعادة الشراء?

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

سؤال

خذ هذا الريبو هيكل:

Server (main repo)
    ProjectA (subrepo)
    SharedLibrary (subrepo)

Client (main repo)
    ProjectB (subrepo)
    SharedLibrary (subrepo)

SharedLibrary يشير إلى نفس المجلد (هذا هو ويندوز) ، فإنه ليس نسخة منفصلة/استنساخ تحت كل الريبو الرئيسي.

نفترض كل الريبو الرئيسي واثنين من changesets ، 0 و 1(نصيحة).نبدأ مع كل اتفاقيات إعادة الشراء الرئيسي في 1(نصيحة) التنقيح.

اتخاذ الخطوات التالية:

  1. في العميل "ريبو" ، تحديث إلى التغيرات المعينة على 0.هذه التحديثات ProjectB و SharedLibrary في وقت سابق ولكن مطابقة التنقيحات.

  2. ProjectA الآن متزامنة مع SharedLibrary.الخطوة 1 تحديث SharedLibrary إلى مراجعة القديمة من ما هو مطلوب من أجل ProjectA التي لا تزال في 1(نصيحة).

  3. في الخادم الريبو ، ونحن نريد أن التحديث SharedLibrary الصحيحة للمراجعة ProjectA ، لذلك نحن تشغيل hg تحديث نصيحة في الخادم الرئيسي الريبو.هذا لا يتم تحديث SharedLibrary الصحيح المراجعة.فإنه يترك SharedLibrary في نفس تنقيح خطوة واحدة.

  4. العودة إلى العميل الريبو وتشغيل hg تحديث نصيحة.SharedLibrary هو الآن في الصحيح مراجعة لكل ProjectA و ProjectB.

ويبدو تحديث في السيرفر الريبو ليس التحقق لمعرفة إذا كان SharedLibrary هو في الصحيح المراجعة.هذا هو السلوك المتوقع ، أو هل هناك طريقة أفضل للقيام بذلك ؟

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

المحلول

ما ترونه هو أن hg update سوف دمج عندما تعمل نسخة القذرة.اسمحوا لي أن أشرح ذلك مع الملفات العادية الأولى.تخيل أن لديك مستودع مع اثنين من المراجعات.أنا في تنقيح 0 foo تعديل:

$ hg diff
diff --git a/foo b/foo
--- a/foo
+++ b/foo
@@ -1,3 +1,3 @@
 first
 second
-third
+third line

ترى أنا غيرت الخط الثالث.الآن, إذا كنت تعمل hg update 1 التعديل ستكون اندمجت كيف foo يبدو في التنقيح 1:

$ hg update 1
merging foo
0 files updated, 1 files merged, 0 files removed, 0 files unresolved

تعديل لا يزال هناك ، foo لا يزال القذرة:

$ hg diff
diff --git a/foo b/foo
--- a/foo
+++ b/foo
@@ -1,3 +1,3 @@
 first line
 second
-third
+third line

عندما كنت فعلت

$ cd client
$ hg update 0

كنت على يقين من أن SharedLibrary تم تحديث وتنقيح هو موضح في .hgsubstate للمراجعة 0 client.

عندما كنت ثم ذهب إلى server, ، SharedLibrary subrepo لم يعد في تنقيح المذكورة في .hgsubstate عند مراجعة 1 في server.وبعبارة أخرى ، فإن العامل نسخ في server كان قذرا — a hg commit من شأنه أن يسفر عن جديد .hgsubstate الملفات التي ترتكب.

الزئبقي يحافظ هذا التعديل عند hg update في server وهذا هو السبب في أنك ترى ذلك SharedLibrary لم يكن الحالية عند تحديث.استخدام hg update -C إذا كنت تريد أن تجعل subrepo الحالي.

الفكرة من وراء هذه الميزة هو أنه يمكنك اختبار إصدارات مختلفة من subrepos.عندما نبحث عن علة ، فإنه غالبا ما يكون من الضروري تحديث المستودع الرئيسي إلى الإصدارات القديمة و حتى انها مريحة أن التعديلات subrepo التنقيحات البقاء في المكان.

علما بأن الوضع مربكا ترونه ليس سببه كيف كنت إعادة استخدام نفس subrepo مرتين.ومع ذلك ، كما لاسي يشير إلى استخدام واحد subrepo في مشاريع متعددة وضعها مرة واحدة على الملقم الخاص بك ومن ثم استنساخ ذلك في استنساخ — مرة واحدة في استنساخ.

لقد ووصف هذا في مزيد من التفاصيل, ولكن باختصار يجب عليك اتباع التوصيات والحفاظ على متطابقة هيكل على كل من الملقم والعملاء.استخدام SharedLibrary = SharedLibrary مسارات في .hgsub الملف الحفاظ على هذا الهيكل.رابط مستودعات معا على جانب الخادم (انظر بلدي إجابة أخرى) لجعل مستودع واحد تظهر تحت عدة عناوين مختلفة/الدلائل.

عندما بدأت مع subrepos ، ثم حذار من ضيق اقتران.إذا كنت تستطيع ، ثم محاولة استخدام السليم تبعية نظام إدارة مثل مخضرم+Nexus جافا القائمة على المشاريع.

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