الزئبقي التحديث لا يعمل subrepo إذا subrepo ينتمي إلى اثنين من أهم اتفاقيات إعادة الشراء?
-
12-12-2019 - |
سؤال
خذ هذا الريبو هيكل:
Server (main repo)
ProjectA (subrepo)
SharedLibrary (subrepo)
Client (main repo)
ProjectB (subrepo)
SharedLibrary (subrepo)
SharedLibrary يشير إلى نفس المجلد (هذا هو ويندوز) ، فإنه ليس نسخة منفصلة/استنساخ تحت كل الريبو الرئيسي.
نفترض كل الريبو الرئيسي واثنين من changesets ، 0 و 1(نصيحة).نبدأ مع كل اتفاقيات إعادة الشراء الرئيسي في 1(نصيحة) التنقيح.
اتخاذ الخطوات التالية:
في العميل "ريبو" ، تحديث إلى التغيرات المعينة على 0.هذه التحديثات ProjectB و SharedLibrary في وقت سابق ولكن مطابقة التنقيحات.
ProjectA الآن متزامنة مع SharedLibrary.الخطوة 1 تحديث SharedLibrary إلى مراجعة القديمة من ما هو مطلوب من أجل ProjectA التي لا تزال في 1(نصيحة).
في الخادم الريبو ، ونحن نريد أن التحديث SharedLibrary الصحيحة للمراجعة ProjectA ، لذلك نحن تشغيل hg تحديث نصيحة في الخادم الرئيسي الريبو.هذا لا يتم تحديث SharedLibrary الصحيح المراجعة.فإنه يترك SharedLibrary في نفس تنقيح خطوة واحدة.
العودة إلى العميل الريبو وتشغيل 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 جافا القائمة على المشاريع.