كيفية الهجرة من مستودع التخريب المعقد إلى نظام التحكم في الإصدار الموزع؟

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

سؤال

لنفترض أن لدينا مستودع التخريب الذي يبدو

/original/0.1
/original/0.2
/variantA/trunk
/variantA/branches/who/branch_for_xxx
/variantA/branches/she/branch_for_yyy
/variantB/trunk
/variantB/branches/who/branch_for_zzz
(... 30 or 40 alike)

حيث يعتبرvarianceA وvariableB تشعبين للبرنامج الأصلي.

أبحث عن طريقة لترحيل هذا المستودع إلى نظام التحكم في الإصدار الموزع:طريقة

  • ليس بالضرورة أن يكون هناك أمر واحد
  • لأي من أنظمة التحكم في الإصدارات الموزعة المعروفة
  • جعل dvcs تفكر في فروعها:/رسمي/{0.1,0.2} أشجار، /variantA/شجرة الجذع، ...
  • توعية DVC بعلاقة الميراث لتلك الأشجار
هل كانت مفيدة؟

المحلول

إذا كنت تعتبر شخص سخيف كمرشح محتمل لـ DVCS، البرنامج النصي روبي svn2git يفعل ما تحتاجه.

مزيد من التفاصيل في السؤال: استنساخ مستودع Svn غير قياسي باستخدام Git-Svn

نصائح أخرى

يأتي Mercurial مزودًا بامتداد تحويل والذي يجب أن يفعل ما تريد.انظر تحويل تفاصيل الامتداد على موقع الويب Mercurial.

بالنسبة لـ Git، راجع التعليمات الموجودة على http://github.com/guides/import-from-subversion

في المرة الأخيرة التي قمت فيها بذلك يدويًا، استخدمت الأوامر أدناه.(كان هذا لمشروع لا يستخدم العلامات أو الفروع.استخدام svn2git قد ينتج نتائج أفضل من git-svn إذا كان لديك علامات أو فروع.)

cat "mysvnusername = Me Myself <me.myself@somewhere.com>" >> authors.txt

svnserve --daemon --foreground --root <SVN-REPO-PARENT-DIR>
git svn clone --stdlayout --authors-file=authors.txt --no-metadata svn://localhost/<SVN-REPO-NAME>

# push to a public repo and clone from there, to get push/pull working easily
cd <SVN-REPO-NAME>
git remote add origin git@github.com:mygithubusername/<GIT-REPO-NAME>.git
git push origin master
cd ..
rm -rf <SVN-REPO-NAME>

git clone git@github.com:mygithubusername/<GIT-REPO-NAME>.git

ولكن نظرًا لأن لديك تخطيط مستودع SVN غير قياسي، فستحتاج إلى تحديد معلمات --trunk و --tags و --branches بدلاً من --stdlayout لـ جيت svn استنساخ.

لتمثيل تاريخ الوراثة الكامل لمستودعك، يمكنك محاولة إعادة ترتيب مستودعك بحيث يكون لديك تخطيط مستودع قياسي مسطح بدلاً من التسلسل الهرمي غير القياسي:

/branches/original-0.1
/branches/original-0.2
/branches/variantA-trunk
/branches/variantA-who-branch_for_xxx
/branches/variantA-she-branch_for_yyy
/branches/variantB-trunk
/branches/variantB-who-branch_for_zzz
...

وهذا من شأنه أن يسهل على أدوات الاستيراد فهم المستودع.وبعد ذلك، عندما يتم استيرادها، يمكنك إعادة تنظيمها بشكل أفضل داخل المستودع الجديد.

لقد سمعت أيضًا أن Git 1.6.x يدعم الاستنساخ العميق، بحيث يمكنك تقديمه git svn clone المعلمات مثل --branches=branches/*/* والتي سوف تبدو عميقة في التسلسل الهرمي للفروع.يرى هذا المشنور للحصول على مثال لاستخدامه.

$ bzr svn-import --layout Trunk1 svn-root-url bzr.repo

ينبغي أن تفعل الشيء الصحيح.يجب أن يكون لديك البرنامج المساعد bzr-svn مثبتًا حتى تتمكن من القيام بذلك.

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