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




version-control interop dvcs (9)

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

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

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

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


Answers

لقد جربت 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" بعيد يمثل الريبو زئب المنبع.


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


لقد حاولت hggit. يعمل لي ، لأن لدي للتعامل مع git'ers و hg'ers. خاصة بالنسبة للمراجعات وهذا شيء عظيم.

مشكلة / تحذير بسيط في هذا الموضوع:

لقد حاولت استنساخ مستودع لينكس مستقر مع زئبق. يتم الاحتفاظ بهذه المستودعات في git وعادة ما يكون لها عدد كبير من الملفات في ذلك.

كانت بطيئة جدا. استغرقني يومين لاستنساخ وتحديث نسخة العمل بشكل كامل.


يمكنك تجربة hg2git ، وهو برنامج python النصي وهو جزء من التصدير السريع ، والذي يمكنك العثور عليه على http://repo.or.cz/w/fast-export.git .

سوف تحتاج إلى تثبيت زئبقي على الرغم من.


هذه أسئلة قديمة ولكني أعتقد أن الجدير بالذكر هو أن المزامنة ثنائية الاتجاه gg-git (و git-git، hg-hg) ممكنة أيضًا مع خدمة Git-hg Mirror . ويستخدم هذا البرنامج hg-git (من بين آخرين) وراء الكواليس ، كما أن كوده مفتوح المصدر أيضًا.

إخلاء المسؤولية: أنا من الشركة وراء ذلك.


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


التحديث من يونيو 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-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 لمزيد من المعلومات.


يبدو أن أفضل طريقة هي القيام أولاً:

git clean

لحذف جميع الملفات غير المتتبعة ومن ثم متابعة git pull المعتاد ...





git version-control mercurial interop dvcs