git - قابلية التشغيل البيني مع مستودع Mercurial




version-control interop (7)

أستخدم GIT على جهاز Mac. قال بما فيه الكفاية. لدي الأدوات ، لدي الخبرة. وأريد الاستمرار في استخدامها. لا حروب هنا ...

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

الآن ... يأتي بعض الرجال مع Mercurial. غرامة لهم: لديهم أسبابهم. ولكن لا يمكنني العثور على أي GIT HG خارج الصندوق. لا أريد التبديل إلى HG ، ولكن ما زلت بحاجة إلى التعامل مع مستودعهم.

أي واحد منكم يعرف حلًا بسيطًا لهذا؟


التحديث من يونيو 2012. يبدو أن هناك الآن الطرق التالية للقدرة على التشغيل البيني Git / Hg عندما يريد المطور العمل من جانب git:

  1. تثبيت Mercurial وملحق hg-git . يمكنك القيام بذلك باستخدام مدير الحزم الخاص بك ، أو باستخدام easy_install hg-git . ثم تأكد من ما يلي في ~ / .hgrc الخاص بك:

    [extensions]
    hggit = 
    

    قد ترى بعض المراجع التي تتحدث عن تحديد امتداد bookmarks هنا أيضًا ، ولكن تم تضمين ذلك في Mercurial منذ الإصدار 1.8. إليك بعض النصائح حول تثبيت hg-git على نظام التشغيل Windows .

    بمجرد أن يكون لديك gg-git ، يمكنك استخدام الأوامر مثل Abderrahim Kitouni المنشورة أعلاه . وقد تم تنقيح هذه الطريقة وتعديلها منذ عام 2009 على الرغم من وجود غلاف ودود: git-hg-again . يستخدم هذا الدليل toplevel كدليل عمل لكل من Mercurial و Git في نفس الوقت. يقوم بإنشاء إشارة مرجعية Mercurial التي يحتفظ بها بالتزامن مع طرف الفرع default (غير مسمى) في مستودع Mercurial ، ويقوم بتحديث فرع Git محلي من تلك الإشارة المرجعية.

  2. git-remote-hg عبارة عن غلاف مختلف ، يعتمد أيضًا على امتداد hg-git Mercurial. هذا بالإضافة إلى الاستفادة من بروتوكولات git-remote-helpers (ومن هنا اسمها). ويستخدم الدليل toplevel فقط لدليل العمل Git ؛ انها تحافظ على مستودع Mercurial لها. كما أنه يحافظ على مستودع Git الثاني ليجعل التزامن بين Git و Mercurial أكثر أمانًا و gitlike.

  3. يستخدم البرنامج النصي git-hg (الذي كان git-hg سابقًا here ) طريقة مختلفة ، استنادًا hg-fast-export السريع من مشروع التصدير السريع . مثل الأسلوب 2 ، هذا أيضاً يحتفظ بمخزن Mercurial العاري ومستودع Git إضافي.

    للسحب ، تتجاهل هذه الأداة إشارات مرجعية Mercurial وتستورد بدلاً من ذلك كل فرع Mercurial مسمى إلى فرع Git ، والفرع الافتراضي Mercurial (غير مسمى) إلى الفرع الرئيسي.

    يناقش بعض التعليقات هذه الأداة على أنها gg-git فقط ، ولكنها تدعي أنها قد اندمجت في دعم git-> hg push في 7 ديسمبر 2011. كما أشرح في مراجعة هذه الأدوات ، على الرغم من الطريقة التي تحاول بها هذه الأداة تنفيذ دفع الدعم لا يبدو أن تكون قابلة للتطبيق.

  4. هناك أيضا مشروع آخر يسمى git-remote-hg . على عكس الإصدار المذكور أعلاه ، لا يعتمد هذا الإصدار على gg-git ، ولكنه بدلاً من ذلك يصل مباشرةً إلى واجهة برمجة تطبيقات Mercurial Python. في الوقت الحالي ، يتطلب استخدامه أيضًا نسخة مصححة من بوابة. لم أحاول هذا حتى الآن.

  5. وأخيرًا ، فإن Tailor هو مشروع يتحول بشكل متزايد بين مجموعة متنوعة من أنظمة VCS المختلفة. يبدو أن تطوير هذا لن يستمر بقوة.

بدت الثلاثة الأولى من هذه الأساليب خفيفة الوزن بما يكفي لإقناعي بالتحقيق. كنت بحاجة إلى تعديلها ببعض الطرق لجعلها تعمل على إعدادي ، وشاهدت بعض الطرق لتعديلها بشكل أكبر لتحسينها ، ثم قمت بتعديلها بشكل أكبر لجعلها تتشابه أكثر مع بعضها البعض حتى أتمكن من تقييم لهم بشكل أكثر فعالية. ثم اعتقدت أن الآخرين قد يرغبون في الحصول على هذه التعديلات أيضًا ، للقيام بالتقييم نفسه. لذا قمت بإعداد حزمة مصدر تمكنك من تثبيت إصداراتي من أي من الأدوات الثلاثة الأولى. يجب أيضًا الاهتمام بتركيب القطع اللازمة hg-fast-export . (تحتاج إلى تثبيت hg-git بمفردك.)

أنا أشجعك على تجربتهم واتخاذ قرار بشأن ما يناسبك. سأكون سعيدًا لسماع الحالات التي تتوقف فيها هذه الأدوات. سأحاول إبقائها متزامنة مع التغييرات في المنبع ، وللتأكد من أن المؤلفين في المنبع يدركون التعديلات التي أعتقد أنها مفيدة.

كما ذكرت أعلاه ، في تقييم هذه الأدوات ، توصلت إلى استنتاج مفاده أن git-hg قابلة للاستخدام فقط من أجل السحب من Mercurial وليس من أجل الدفع.

فيما يلي ، بعض أدلة المقارنة / الترجمة المفيدة بين Git و Mercurial ، وفي بعض الحالات تستهدف المستخدمين الذين يعرفون بالفعل Git:


لقد جربت git-hg-again git-hg git-hg-again على كل من mg's repo hg ، يبدو أن لاحقًا يحترم ترتيب دمج الدمج ، الأول هو عشوائي قليلاً. يمكنك أن ترى من لقطات الشاشة أدناه.

رسم توضيحي لسجل دمج mutt الذي تم استيراده بواسطة git-hg من git-hg :

رسم git-hg-again دمج mutt الذي تم استيراده بواسطة git-hg-again :

رسم بياني لتاريخ actuall تم رسمه بواسطة hgk في مستودع hg لـ mutt:

كما ترون من أعلاه ، فإن الرسم البياني الثاني من git-hg-again قريب جدا من الرسم البياني hgk الأصلي ويعكس في الواقع سير العمل الحقيقي للمغفل.

عيب واحد من git-hg-مرة أخرى وجدت أنه لا يضيف عن بعد "hg" ، بل يستورد كل ما لديه من علامات مثل العلامات المحلية ، git-hg لديه بعيد "hg" بعيد يمثل الريبو زئب المنبع.


لقد حققت نجاحًا كبيرًا مع git-hg من git-hg (يتطلب hg للعمل hg أيضًا). وهو يدعم الجلب والسحب والدفع وهو أكثر ثباتًا بالنسبة لي من hg-git (ميزات مشابهة من hg إلى git).

راجع https://github.com/cosmin/git-hg#usage للحصول على أمثلة الاستخدام. واجهة المستخدم مشابهة جدا ل git-svn .

يتطلب git-hg مساحة قرص إضافية لكل repon hg مستنسخ. تطبيق يستخدم استنساخ زئبقي كامل ، استنساخ git العارية إضافية وريبو جيت الفعلي. مساحة القرص المطلوبة هي تقريبا 3 مرات من استخدام git العادي فقط. يتم تخزين النسخ الإضافية أسفل دليل .git الخاص بدليل العمل (أو الموقع المشار إليه بواسطة GIT_DIR كالمعتاد).

ملاحظة: المشكلة الأساسية التي يحاول git-hg حلها هي أنه لا يوجد تخطيط 1: 1 بين ميزات git و hg . تكمن المشكلة الأكبر في عدم توافق الممانعة بين فروع git و hg unnamed branches و hg branch branch و hg bookmarks (كل تلك تبدو وكأنها فروع git المستخدمين). مشكلة ذات صلة هي أن hg يحاول حفظ اسم الفرع المحدد الأصلي في محفوظات الإصدار بدلاً من git حيث يتم فقط إضافة اسم الفرع إلى رسالة الالتزام القالب بشكل افتراضي.

يجب أن توضح أي أداة تدعي أنها تنشئ جسرًا git للتشغيل البيني بين git و hg كيف ستتعامل مع مطابقة المعاوقة هذه. يمكنك بعد ذلك تحديد ما إذا كان الحل المحدد يناسب احتياجاتك.

إن الحل الذي يستخدمه git-hg يستخدم لتجاهل جميع عناوين hg المرجعية وتحويل الفروع المسماة إلى فروع git. بالإضافة إلى ذلك ، يقوم بتعيين فرع git master إلى الفرع hg الافتراضي غير المسمى.


نظرًا لأن hg-git هو جسر ذو مسارين ، فسيسمح لك أيضًا بدفع مجموعات التغييرات من Git إلى Mercurial.


هناك git-remote-hg جديد يوفر دعمًا محليًا:

دعم جسر في جيت ل Mercurial وبازار

فقط انسخ git-remote-hg إلى PATH $ ، واجعله قابلاً للتنفيذ ، وهذا كل شيء ، بدون تبعيات (بخلاف Mercurial):

git clone hg::https://www.mercurial-scm.org/repo/hg/

يجب أن تكون قادرًا على الدفع والسحب منه كما لو كان مستودع Git أصليًا.

عند دفع فروع Git جديدة ، سيتم إنشاء إشارات مرجعية Mercurial لها.

راجع wit git-remote-hg لمزيد من المعلومات.


يجب أن تكون قادرًا على استخدام hg-git .

hg clone <hg repository>

تحرير ~/.hgrc وإضافة:

[extensions]
hgext.bookmarks =
hggit =

إنشاء إشارة مرجعية حتى يكون لديك master في git:

cd <repository>
hg bookmark -r default master

تحرير .hg/hgrc في المستودع وإضافة:

[git]
intree = true

الآن يمكنك إنشاء مستودع git:

hg gexport

ويمكنك استخدام الدليل الناتج كمستند بوابة. السحب من الزئبقي سيكون:

hg pull
hg gexport

ودفع إلى الزئبقي:

hg gimport
hg push

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

ملاحظة: إذا كان لديك مشكلة في سير العمل هذا ، فالرجاء تسجيل خطأ.


Hg-Git Mercurial Plugin . لم أحاول ذلك بنفسي ، ولكن قد يستحق التحقق من ذلك.







dvcs