استخدام Mercurial لفصل الإصدار الخاص والعامة

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

  •  03-07-2019
  •  | 
  •  

سؤال

كيف يمكنك استخدام Mercurial للمشكلة التالية.

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

كيف ستفعل ذلك، مع تقليل خطر تسرب الامتداد إلى Core (بمجرد دفع السجل إلى الخادم العام، لن يكون هناك رجعة!)، مع الحفاظ على المرونة للقيام بذلك لبعض التغييرات.الفروع؟الحيوانات المستنسخة؟مقس؟شيء آخر؟

أنا حاليًا على دراية بمستودعات الاستنساخ فقط، وأحب بساطتها كثيرًا.

يحرر:لقد توصلت إلى هذا المخطط، لكني لا أستطيع أن أجعله يعمل تحت النوافذ.مستودعان (أساسي وملحق).في التمديد هناك نوعان الفروع, ، وكذلك الأساسية والامتداد.الآن، يمكنك تسجيل خطاف لكل مستودع في Mercurial، لذلك أرغب في تسجيل خطاف "pretxnchangegroup" في Core repo الذي لا يسمح بعمليات تسجيل الوصول من فرع الامتداد، كما هو موضح نوعًا ما في كتاب الزئبقي.باستثناء أنني لا أتمكن من العمل تحت النوافذ.لذا:

  • هل لدى أي شخص مثال على شيء من هذا القبيل (في الواقع، أي خطاف يغير نتيجة الصفقة) تحت النوافذ؟
  • سأظل قادرًا على استخدام عملية الزرع لاختيار التغييرات من الامتداد إلى الفرع الأساسي، أليس كذلك؟
هل كانت مفيدة؟

المحلول

بعد بعض الاختبارات، سأحاول هذا المخطط.مستودعان رئيسيان وفرعان مسميان، Core وExtension.

مستودع أساسي رئيسي واحد، والذي يجب أن يحتوي فقط على مجموعات التغييرات الأساسية والمصدر.وبالتالي يجب أن يحتوي فقط على مجموعات التغييرات من الفرع الأساسي.يتم التحقق من ذلك باستخدام ربط المستودع التالي في hgrc الخاص بهذا الريبو:

pretxnchangegroup.branch = hg heads --template "current branches: {branches} " | find "Extension" && exit 1 || exit 0

يبدو الأمر غريبًا بعض الشيء، ولكن في الأساس يتم إطلاقه بعد اكتمال الدفع أو السحب، ولكن قبل تنفيذه.عند هذه النقطة، إذا فشل الخطاف، فسيتم التراجع عن المعاملة.لذلك يبحث الخطاف عن مجموعة تغييرات لفرع الامتداد ويفشل إذا عثر عليه - مما يمنع بشكل فعال تغييرات الامتداد من الدخول إلى الريبو الأساسي.

يحتوي الريبو الثاني على كلا الفرعين الأساسي والامتداد ومجموعات التغييرات، وهو المكان الذي يتم فيه تبادل مجموعات التغييرات بين الفرعين.الدمج العادي من Core إلى Extension، والزرع من Extension إلى Core.

آمل أن يساعد هذا شخص آخر.

نصائح أخرى

(بمجرد دفع التاريخ ، لن يعود!)

متأكد من أن هناك...هذا هو ما يدور حوله التحكم في الإصدار!

لم أفعل أي شيء مثل هذا من قبل، ولكن يبدو أن زرع اعضاء الأمر سيكون مفيدا.أيضًا، يمكنك الحصول على نسخ من النسخ، والدفع إلى أي منها، وما إلى ذلك.

ال امتداد الغابة يسمح لك بالاحتفاظ بالعديد من اتفاقيات إعادة الشراء كجزء من واحدة كبيرة.يبدو أن هذا يمكن أن يساعد هنا.

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