كيفية الهجرة من مستودع التخريب المعقد إلى نظام التحكم في الإصدار الموزع؟
سؤال
لنفترض أن لدينا مستودع التخريب الذي يبدو
/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 مثبتًا حتى تتمكن من القيام بذلك.