سؤال

لقد كنت أستخدم ComponentSoftware's CS-RCS BASIC لسنوات عديدة حتى الآن لإدارة مختلف مشاريع التطوير الواحد. لقد عملت بشكل جيد للغاية بالنسبة لي ، لكنني الآن أريد أن أنقل إلى نظام تحكم مراجعة حديث ، وبعد دراسة خياراتي قررت على الزئبق.

تكمن المشكلة في أنني استخدمت دائمًا مستودعًا مركزيًا لـ CS-RCS ، وأود الآن استخدام مستودعات الزئبق الفردية للمشاريع الفردية ، مع الحفاظ على التاريخ من مستودع RCS الخاص بي.

بعد بعض التعمق ، خلصت إلى أن الطريقة الوحيدة للقيام بذلك هي تحويل مستودع RCS الخاص بي إلى مستودعات CVS الفردية ، ثم تحويلها إلى Mercurial. ربما كان هذان الموقعان هو الأكثر فائدة:

تمشيا مع فكرة جيف أتوود عن طرح سؤالي والإجابة عليه ، سأجيب على هذا لأي شخص آخر عالق في هذا الموقف ، وفي حال كان عليّ العثور عليه مرة أخرى لاحقًا. كما سترى ، على الرغم من أنني قد وجدت حلًا ، إلا أنه عالي الصدفة ولديه مشكلة واحدة على الأقل. إذا كان لدى أي شخص آخر طريقة أفضل ، فأود بالتأكيد أن أسمع عنها.

هل كانت مفيدة؟

المحلول

ها هي الطريقة التي توصلت بها ، الثآليل وكل شيء. إنها "شحن" قليلاً ، لأنني لا أعرف شيئًا عن السير الذاتية وليس كثيرًا (حتى الآن) عن الزئبق:

لديّ جهاز افتراضي لنظام التشغيل Windows XP يمكنني أخذ لقطات منه ، لذلك فعلت ذلك ثم قمت بتثبيت CVSNT وإصدار خط الأوامر Windows من Mercurial (أستخدم السلحفاة على الجهاز الرئيسي الخاص بي). لقد فعلت ذلك في VM حتى أتمكن من التخلص بسهولة من CVSNT ، Mercurial ، وأي شيء آخر كان علي إنشاءه أثناء القيام بهذه الترحيل لمرة واحدة. نعم ، ربما لم يكن علي القيام بذلك ، لكن VM كان متاحًا بالفعل ولدي بالفعل أجزاء غريبة من التطبيقات المتبقية من دورات التثبيت/إلغاء التثبيت على مر السنين. :-)

بقدر ما أستطيع أن أقول ، كان CVSNT هو البرنامج الوحيد المتاح الذي يمكن بسهولة إعداد خادم CVS على جهاز Windows. يبدو أن هذا كان مجانيًا في وقت واحد ولكن المالك الموقع الحالي الآن يسأل المال. هذا ليس شيئًا سيئًا ، لكنني حقًا لم أستطع تبرير إنفاق المال لمجرد إجراء تحويل لمرة واحدة. لقد قمت في النهاية بتتبع إصدار أقدم من CVSNT مع بحث Google وتثبيته بدون مشاكل.

فيما يلي الملاحظات التي أشرت إليها أثناء تعلم كيفية جعل هذا التحويل يعمل:

النسخة الطويلة

انسخ مجلد رمز المصدر الذي تحتاجه من محرك الكمبيوتر الرئيسي إلى محرك أقراص VM. انسخ ملفات "، V" المختلفة من بنية مجلد C: RCS إلى نفس مجلد الكود المصدر على VM. فقط انسخ ملفات ، v من المجلد المقابل في c: rcs. افتح مربع موجه أوامر على VM واكتب ما يلي:

path %PATH%;C:\Program Files\cvsnt
mkdir \cvs-repo  [or clean the folder out if it already exists]
cvs -d \cvs-repo init
[A DIR of \cvs-repo should show a CVSROOT folder in there.]

قم بعمل نسخة من مجلد رمز المصدر الخاص بك في \cvs-repo. \cvs-repo يجب الآن أن يكون لديك مجلدان فقط: CVSroot والمجلد الجديد الخاص بك. انسخ في ملفات "، V" المناسبة أيضًا.

mkdir \cvs-checkout [or clean that folder out if it already exists]
cd \cvs-checkout
cvs -d \cvs-repo co name_of_your_source_code_folder

يجب أن يعرض dir of " cvs-checkout name_of_your_source_code_folder" جميع ملفات التعليمات البرمجية المصدر ، والتي يتم الآن فحصها من CVS.

إذا لم تكن قد فعلت ذلك بالفعل ، فقم بتنزيل Mercurial من https://www.mercurial-scm.org/ وتثبيته. افتح نسخة من Notepad واسحب الملف "C: Program Files Mercurial hgrc.d mercurial.rc" فيه. تحت [الامتدادات] ، قم بإزالة الناموسولون في بداية السطر ";convert =". احفظ الملف إلى" c: documents والإعدادات user_name mercurial.ini "

العودة إلى سطر أوامر VM:

path %PATH%;C:\Program Files\Mercurial
mkdir \my-repo.hg  [or clean that folder out if it already exists]
hg convert --datesort \cvs-checkout\source_code_folder_name \my-repo.hg
cd \my-repo.hg
[A DIR of \my-repo.hg should show a new ".hg" folder.]
hg update
[A DIR should now show the ".hg" folder and all the checked-out files.]

انسخ المجلد ".hg" من my-repo إلى مجلد الكود المصدر على محرك الأقراص الثابتة لجهاز الكمبيوتر الرئيسي. سيظهر مجلد الوجهة الآن في TortoiseHg مع كل تاريخ التغيير المناسب ، ولكن جميع الملفات التي تم تمييزها كما تم تغييرها (أيقونة تراكب علامة تعجب في دائرة حمراء). وذلك لأن مستودع Mercurial الجديد يعتقد أن الملفات قد تم فحصها بنهايات خط UNIX (0x0A) بدلاً من Windows (0x0D ، 0x0A). يبدو أن هذا يحدث في عملية "HG Convert" ، ولم أجد أي طريقة حولها.

النسخة القصيرة

بمجرد إعداد كل شيء في VM ، إليك ما يجب فعله:

  • احذف كل شيء في cvs-repo و cvs-checkout و my-repo.hg.
  • في سطر الأوامر ، cvs -d \cvs-repo init.
  • مرة أخرى على الجهاز الرئيسي الخاص بك ، انسخ المجلد الكود المصدر في المجلد المشترك للجهاز الظاهري (هكذا تفعل ذلك في VirtualBox ؛ قد يتيح لك برنامج VM آخر سحب المجلد وإقالة المجلد إلى VM).
  • انسخ ملفات "، V" المناسبة إلى مجلد رمز المصدر في المجلد المشترك للماكينة الظاهرية.
  • مرة أخرى في VM ، انقل مجلد الكود المصدر إلى CVS-REPO.
  • cd \cvs-checkout
  • cvs -d \cvs-repo co name_of_your_source_code_folder
  • hg convert --datesort \cvs-checkout\name_of_your_source_code_folder \my-repo.hg
  • cd \my-repo.hg
  • hg update
  • انسخ المجلد .hg من my-repo إلى L: محرك الأقراص على VM (L هو خطاب محرك الأقراص المعين من مجلد VM المشترك).
  • انقل هذا المجلد من مجلد نقل الجهاز الظاهري إلى مجلد رمز المصدر النهائي على الكمبيوتر المضيف.

ملف دفعة مفيدة

بمجرد أن أعمل هذا العمل ، قمت بإعداد هذا الملف الدُفعات على VM لأتمتة العملية قدر الإمكان:

@echo off
rem Converts source code under RCS control to a Mercurial repository.
rem This batch takes one argument: the name of the source-code folder (in quotes if necessary).
rem
rem This is for a VirtualBox VM that already has CVSNT and Mercurial installed, and has a Shared Folder mapped to drive L.
@echo On the host, copy the source-code folder into the Virtual Machine Transfer folder.  Copy the appropriate ",v" files into the source-code folder in the Virtual Machine Transfer folder.
pause
@echo on
cd \
rmdir /S/Q \cvs-repo
mkdir \cvs-repo 
rmdir /S/Q \cvs-checkout
mkdir \cvs-checkout
rmdir /S/Q \my-repo.hg
mkdir \my-repo.hg
cvs -d \cvs-repo init
xcopy L:\%1 \cvs-repo\%1 /E/I
cd \cvs-checkout
cvs -d \cvs-repo co %1
hg convert --datesort %1 \my-repo.hg
cd \my-repo.hg
hg update
xcopy \my-repo.hg\.hg L:\.hg /E/I

استنتاج

لذلك ، كل هذا نجح ولكن تركني مع الملفات التي كانت لها نهايات الخط الخاطئ. انظر الى هذا السؤال, ، أرى أنني لست الوحيد الذي يعاني من هذه المشكلة. يمكنني العيش مع هذا ، لكنني ما زلت أرغب في إصلاحه إذا كان أي شخص يعرف حلًا.

نصائح أخرى

إذا كان لدى Mercurial دعم سريع للتصدير/تصدير سريع ، وإذا لم تستخدم مستودعات متعددة الأرفف الفروع ، فيمكنك على الأرجح محاولة استخدام أداة التصدير RCS (متوفرة @ متوفرة @ http://git.oblomov.eu/rcs-fast-export ). على الرغم من أنني استخدمته فقط للتصدير من RCS إلى GIT حتى الآن ، إلا أنني لست على دراية بأي أوامر تصدير سريعة محددة GIT بحيث تعمل.

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