سؤال

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

في وقت لاحق عندما أصبحت أفضل قليلاً إلى الزئبق ، أدركت أن هناك شيئًا مثل "تمديد تحويل" يتيح لك تحويل ريبو SVN إلى ريبو زئبقي. الآن ما أريد فعله هو تحويل SVN REPO القديم ثم إجراء جميع مجموعات التغيير من ريبو الزئبقي الموجود حاليًا إلى هذا الريبو المحول إلا الالتزام الأول بالزئبق.

لقد حولت SVN Repo إلى ريبو زئبقي محلي ولكن الآن عندما أكون عالقًا. اعتقدت أنني سأتمكن من استخدام امتداد التحويل لجلب مستودع الزئبق الحالي إلى واحد تم تحويله ووجود خريطة لصق قم بإزالة الالتزام الأول ، لكن لا يمكنني الحصول على هذا العمل.

لقد حاولت أيضًا استخدام Convert بدون لصق خريطة للحصول على جميع مجموعات التغيير من ريبو الزئبقي الحالي في الإصدار المحول و Rebase الإصدار الثاني في التيار إلى آخر الالتزام من مستودع SVN القديم ولكن لا يمكنني الحصول على هذا للعمل سواء.

لجعل هذا أكثر وضوحًا ، دعنا نقول إن لدي هذين المستهدين:

A: revA1-revA2
B: revB1-revB2-revB3 (Where revB1 is actually a copy of revA2)

الآن أريد أن أجمع هذين في المستودع الجديد الذي يحتوي على هذا:

C: revA1-revA2-revB2-revB3
هل كانت مفيدة؟

المحلول

طالما أنك تغير التجزئة على المراجعات الجديدة (أنت) ، فقد تستخدم أيضًا export و import (أو ال transplant الأمر الذي هو غلاف حول الاثنين).

لقد قمت بالفعل بتحويلك ، وهو أمر رائع ، الآن انتقل إلى repo b وافعله:

hg export -o 'changeset-%R.patch' 1:tip

سيؤدي ذلك إلى إنشاء تغييرات-##. تصحيح لكل تغييرات في الريبو B ، باستثناء الأول (الصفر المرقم).

اذهب الآن إلى repo c واستيرادها:

hg import $(ls *.patch | sort -V)

يجب أن ينطبق كل هذا بشكل نظيف إذا كانت REVA2 و REVB1 متطابقة بالفعل.

نصائح أخرى

يمكنك سحب التغييرات من مستودع غير ذي صلة مع "HG Pull -قوة"

هنا مثال على الاستخدام البسيط:

قم بإعداد دلائل الاختبار

C:\temp>mkdir hgtest
C:\temp>cd hgtest
C:\temp\hgtest>mkdir a
C:\temp\hgtest>mkdir b
C:\temp\hgtest>mkdir c

جعل المستودع أ

C:\temp\hgtest>cd a
C:\temp\hgtest\a>hg init
C:\temp\hgtest\a>echo line one >> file.txt
C:\temp\hgtest\a>hg add file.txt
C:\temp\hgtest\a>hg ci -m "check in one"
C:\temp\hgtest\a>echo line two >> file.txt
C:\temp\hgtest\a>hg ci -m "check in two"
C:\temp\hgtest\a>echo line three >> file.txt
C:\temp\hgtest\a>hg ci -m "check in three"

جعل المستودع ب

C:\temp\hgtest\a>cd ..\b
C:\temp\hgtest\b>copy ..\a\file.txt file.txt
C:\temp\hgtest\b>hg init
C:\temp\hgtest\b>hg add file.txt
C:\temp\hgtest\b>hg ci -m "check in b one"
C:\temp\hgtest\b>echo line four >> file.txt
C:\temp\hgtest\b>hg ci -m "check in b two"
C:\temp\hgtest\b>echo line five >> file.txt
C:\temp\hgtest\b>hg ci -m "check in b three"

اجعل المستودع C أول استنساخ من A ، ثم اسحب التغييرات من B.

C:\temp\hgtest\b>cd ..\c
C:\temp\hgtest\c>hg clone C:\temp\hgtest\a .
C:\temp\hgtest\c>hg pull --force C:\temp\hgtest\b
C:\temp\hgtest\c>hg merge
C:\temp\hgtest\c>hg ci -m "check in c one"
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top