تحويل مشروع Mercurial إلى Git




(8)

أحتاج لتحويل مشروع زئبقي إلى مشروع git ، لكني أرغب في الحفاظ على تاريخ الالتزام سليماً. كان حلّي الحالي هو إزالة الملفات ذات الصلة بالزئبق فقط ، ثم إضافة init && إضافة الملفات التي أحتاجها يدويًا ، ولكن ذلك لن يحافظ على السجلّ. هل يوجد أي حلول لهذه؟


Answers

كان لدي مهمة مماثلة للقيام بها ، ولكنها احتوت على بعض الجوانب التي لم تكن مغطاة بما يكفي من الإجابات الأخرى هنا:

  • كنت أرغب في تحويل جميع (في حالتي: اثنين ، أو بشكل عام: أكثر من واحد) فروع ريبو بلدي.
  • كان لدي غير ASCII و (كونها مستخدم Windows) أحرف غير UTF8-encoded (للفضول: umlaute الألمانية) في بلدي تلتزم رسائل وأسماء الملفات.

لم أحاول تصدير سريع وتصدير hg-fast ، لأنها تتطلب أن يكون لديك بايثون وبعض وحدات بيثون Mercurial على جهازك ، والتي لم يكن لدي.

لقد جربت hg-init مع TortoiseHG ، وأعطتني هذه الإجابة بداية جيدة. ولكن يبدو أنه يحول فقط الفرع الحالي ، وليس كل مرة واحدة (*). لذلك قرأت مستندات hg-init ونشر هذه المشاركة في المدونة

[git]  
branch_bookmark_suffix=_bookmark

ل mercurial.ini الخاص بي ، وفعلت

hg bookmarks -r default master  
hg bookmarks -r my_branch my_branch_bookmark  
hg gexport

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

أو تقريبا ...

جري

git status

على نسخة العمل الخاصة بي وأظهرت جميع الملفات مع أحرف غير ASCII في أسمائها كملفات untracked. لذلك واصلت البحث واتبعت هذه النصيحة :

git rm -rf --cached \*  
git add --all
git commit 

وأخيرا كان الريبو على استعداد لدفعه إلى Bitbucket :-)

كما أنني حاولت المستورد جيثب كما هو مذكور في هذا الجواب . استخدمت Bitbucket كنظام المصدر ، وقام Github بعمل جيد ، بمعنى أنه قام بتحويل جميع الفروع تلقائيًا. ومع ذلك ، فقد أظهرت '؟' - أحرف لجميع الأحرف غير ASCII في رسائل الالتزام الخاصة بي (Web-UI والمحلية) وأسماء الملفات (Web-UI فقط) ، وبينما أتمكن من إصلاح أسماء الملفات كما هو موضح أعلاه ، لم يكن لدي أي فكرة ما يجب فعله برسائل الالتزام ، ولذلك أفضل نهج hg-init. بدون مشكلة الترميز ، كان مستورد Github حلًا مثاليًا وسريعًا (طالما أنك تمتلك حساب Github مدفوع الأجر أو يمكنك تحمل أن يكون الريبو الخاص بك عامًا طالما أنه يتطلب سحبه من Github إلى جهازك المحلي).

(*) لذا بدا الأمر قبل أن أكتشف أنه يجب علي وضع إشارة مرجعية على جميع الفروع التي أريد تصديرها. إذا قمت بذلك وقمت بدفع الريبو العاري (!) ، كما تقول الإجابة المرتبطة ، تحصل على جميع الفروع.


يمكنك تجربة استخدام fast-export :

cd ~
git clone https://github.com/frej/fast-export.git
git init git_repo
cd git_repo
~/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD

أيضا إلقاء نظرة على هذا السؤال .


هناك خيار آخر هو إنشاء حساب حر بنقل قمينة (kiln) بين القمامة و hg مع احتجاز البيانات الوصفية بنسبة 100٪ ، بحيث يمكنك استخدامه لمرة واحدة أو استخدامه للوصول إلى مستودع باستخدام أي عميل تفضله.


سيكون هذا أفضل كتعليق ، آسف ليس لدي أذونات التعليق.

كان تعليق @ mar10 القطعة المفقودة كنت بحاجة للقيام بذلك.

لاحظ أن "/ path / to / old / mercurial_repo" يجب أن يكون مسارًا على نظام الملفات (وليس عنوان URL) ، لذا يجب عليك استنساخ المستودع الأصلي من قبل. - يوم 10 ديسمبر 27 '13 الساعة 16:30

كان هذا التعليق في ما يتعلق بالإجابة التي حلت هذا بالنسبة لي ، https://.com/a/10710294/2148757 وهو نفس الإجابة كإجابة صحيحة هنا ، https://.com/a/16037861/2148757

أدى هذا إلى نقل مشروع hg إلى git بحيث لا يتأثر سجل الالتزام.


من عند:

http://hivelogic.com/articles/converting-from-mercurial-to-git

المهاجرة

إنها عملية بسيطة نسبيًا. أولاً نقوم بتنزيل التصدير السريع (أفضل طريقة هي عبر مستودع Git الخاص به ، والذي سوف يستنسخ إلى سطح المكتب) ، ثم نقوم بإنشاء مستودع git جديد ، وإجراء الترحيل ، والتحقق من HEAD. على سطر الأوامر ، فإنه يذهب مثل هذا:

cd ~/Desktop
git clone git://repo.or.cz/fast-export.git
git init git_repo
cd git_repo
~/Desktop/fast-export/hg-fast-export.sh -r /path/to/old/mercurial_repo
git checkout HEAD

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

هذا كل شيء ، انتهيت.


إذا كنت ترغب في استيراد مستودع المخزون الزئبقي الموجود لديك إلى مستودع "GitHub" ، يمكنك الآن ببساطة استخدام GitHub Importer المتاح here [تسجيل الدخول مطلوب]. لا مزيد من العبث مع تصدير سريع وما إلى ذلك (على الرغم من أنها أداة جيدة للغاية)

سوف تحصل على كل ما تبذلونه من الالتزام والفروع والعلامات سليمة. شيء واحد أكثر من رائع هو أنه يمكنك تغيير هوية البريد الإلكتروني للمؤلف كذلك. تحقق من لقطات الشاشة أدناه:


حسناً ، لقد عملت أخيراً هذا هو استخدام TortoiseHg على ويندوز. إذا كنت لا تستخدم ذلك يمكنك القيام بذلك على سطر الأوامر.

  1. تثبيت TortoiseHg
  2. انقر بزر الماوس الأيمن فوق مساحة فارغة في المستكشف ، وانتقل إلى إعدادات TortoiseHg:

  1. تمكين hggit :

  1. افتح سطر الأوامر ، أدخل دليل فارغ .

  2. git init --bare .git (إذا كنت لا تستخدم ريبو العاري ستحصل على خطأ مثل abort: git remote error: refs/heads/master failed to update

  3. cd إلى مستودع Mercurial الخاص بك.

  4. hg bookmarks hg

  5. hg push c:/path/to/your/git/repo

  6. في دليل Git: git config --bool core.bare false (لا تسألني لماذا. شيء عن "أشجار العمل". Git غير ودي على الإطلاق. أقسم أن كتابة الشفرة الفعلية أسهل من استخدام Git.)

نأمل أن تنجح ثم يمكنك أن تدفع من هذا الريبو جيت الجديد إلى واحد غير عارية.


  1. إزالة الأصل باستخدام الأمر على gitbash git remote rm origin
  2. وأضف الآن أصلًا جديدًا باستخدام gitbash git عن إضافة أصل (نسخ HTTP URL من مستودع المشروع في مجموعة البيانات)




git mercurial