সৌভাগ্যক্রমে আমাদের মধ্যে যারা এখনও সিভিএস ব্যবহার করতে বাধ্য হয়েছেন তাদের জন্য গিটটি আপনি যা করতে চাইছেন ঠিক তা করার জন্য বেশ ভাল সরঞ্জাম সরবরাহ করে। আমার পরামর্শগুলি (এবং আমরা এখানে $ কার্যক্রমে কী করি):
প্রাথমিক ক্লোন তৈরি করা হচ্ছে
git cvsimport
সিভিএস পুনর্বিবেচনার ইতিহাসকে গিট সংগ্রহস্থল হিসাবে ক্লোন করতে ব্যবহার করুন । আমি নিম্নলিখিত অনুরোধটি ব্যবহার করি:
% git cvsimport -d $CVSROOT -C dir_to_create -r cvs -k \
-A /path/to/authors/file cvs_module_to_checkout
-A
বিকল্প ঐচ্ছিক কিন্তু এটা যে জীবনবৃত্তান্ত থেকে আমদানি করা এর চেহারা আপনার পুনর্বিবেচনা ইতিহাস করতে সাহায্য করে আরো Git মত (দেখুন man git-cvsimport
কিভাবে এই সেট আপ করা হয়েছে আরো তথ্যের জন্য)।
সিভিএস সংগ্রহস্থলের আকার এবং ইতিহাসের উপর নির্ভর করে, এই প্রথম আমদানিতে বেশ দীর্ঘ সময় লাগবে। আপনি যদি মানসিক প্রশান্তি চান যে আসলে কিছু হচ্ছে। তবে উপরের কমান্ডটিতে একটি -v যুক্ত করতে পারেন।
এই প্রক্রিয়াটি শেষ হয়ে গেলে, আপনার কাছে একটি master
শাখা থাকবে যা সিভিএসের হেডকে প্রতিফলিত করবে (ব্যতিক্রমটি যে ব্যতীত git cvsimport
অর্ধ-সমাপ্ত প্রতিশ্রুতিটি ধরা এড়ানোর জন্য শেষ 10 মিনিটের কমিটগুলি অগ্রাহ্য করে)। তারপরে আপনি git log
এবং বন্ধুদের সংগ্রহস্থলের পুরো ইতিহাসটি পরীক্ষা করতে ঠিক যেমন গিটটি শুরু থেকেই ব্যবহার করছেন তা পরীক্ষা করতে পারেন।
কনফিগারেশন
কয়েকটি কনফিগারেশন টুইট রয়েছে যা ভবিষ্যতে সিভিএস (পাশাপাশি রফতানি) থেকে ইনক্রিমেন্টাল আমদানি সহজ করে দেবে। এগুলি git cvsimport
ম্যান পৃষ্ঠায় নথিভুক্ত করা হয়নি তাই আমি ধারণা করি তারা বিজ্ঞপ্তি ছাড়াই পরিবর্তন করতে পারে তবে, এফডাব্লুআইডাব্লু:
% git config cvsimport.module cvs_module_to_checkout
% git config cvsimport.r cvs
% git config cvsimport.d $CVSROOT
এই সমস্ত অপশন কমান্ড লাইনে নির্দিষ্ট করা যায় যাতে আপনি নিরাপদে এই পদক্ষেপটি এড়াতে পারেন।
বর্ধিত আমদানি
পরবর্তী git cvsimport
অনুরোধের চেয়ে পরবর্তীটি খুব দ্রুত হওয়া উচিত। এটি cvs rlog
প্রতিটি ডিরেক্টরিতে (এমনকি কেবলমাত্র ফাইলগুলিতে ফাইল রয়েছে Attic
) এটি করে যাতে এটি কয়েক মিনিট সময় নিতে পারে। আপনি যদি উপরে প্রস্তাবিত কনফিগারেশন নির্দিষ্ট করে থাকেন তবে আপনাকে যা করতে হবে তা হ'ল:
% git cvsimport
আপনি যদি ডিফল্টগুলি নির্দিষ্ট করতে আপনার কনফিগারেশন সেট আপ না করে থাকেন তবে আপনাকে সেগুলি কমান্ড লাইনে নির্দিষ্ট করতে হবে:
% git cvsimport -r cvs -d $CVSROOT cvs_module_to_checkout
যেভাবেই হোক, দুটি বিষয় মনে রাখতে হবে:
- আপনার গিট সংগ্রহস্থলের মূল ডিরেক্টরিতে আছেন তা নিশ্চিত করুন in আপনি অন্য কোথাও থাকলে, এটি একটি নতুন কাজ করার চেষ্টা
cvsimport
করবে যা আবার চিরতরে লাগবে।
- আপনি আপনার
master
শাখায় রয়েছেন তা নিশ্চিত করুন যাতে পরিবর্তনগুলি আপনার স্থানীয় / বিষয় শাখায় একীভূত করা যায় (বা পুনর্বাসিত)।
স্থানীয় পরিবর্তন করা
অনুশীলনে, আমি সর্বদা শাখাগুলিতে পরিবর্তন করার এবং আপনি master
যখন সিভিএস সংগ্রহস্থলগুলিতে এই পরিবর্তনগুলি রফতানি করতে প্রস্তুত হন কেবল তখনই মার্জ করার পরামর্শ দিই । আপনার শাখাগুলিতে আপনার পছন্দসই ওয়ার্কফ্লো ব্যবহার করতে পারেন (মার্জিং, রিবেসিং, স্কোয়াশিং ইত্যাদি) তবে অবশ্যই স্ট্যান্ডার্ড রিবেসিং বিধি প্রযোজ্য: অন্য কেউ যদি আপনার শাখায় পরিবর্তনগুলি ভিত্তি করে চলেছে তবে রিবেস করবেন না।
সিভিএসে পরিবর্তন রফতানি করা হচ্ছে
git cvsexportcommit
কমান্ড আপনি একটি একক জীবনবৃত্তান্ত সার্ভারে আউট কমিট রপ্তানি করতে পারেন। আপনি একটি একক প্রতিশ্রুতি আইডি নির্দিষ্ট করতে পারেন (বা যে কোনও কিছু যা সংজ্ঞায়িত হিসাবে একটি নির্দিষ্ট প্রতিশ্রুতি বর্ণনা করে man git-rev-parse
)। তারপরে একটি ডিফ তৈরি করা হয়, সিভিএস চেকআউটে প্রয়োগ করা হয় এবং তারপরে প্রকৃত cvs
ক্লায়েন্টটি ব্যবহার করে সিভিএসের প্রতি প্রতিশ্রুতিবদ্ধ (optionচ্ছিকভাবে) । আপনি আপনার বিষয় শাখায় প্রতিটি মাইক্রো কমিট রফতানি করতে পারেন তবে সাধারণত আমি একটি আপ-টু-ডেটে master
মার্জ কমিট তৈরি করতে চাই এবং সিভিএসে একক মার্জ কমিট রফতানি করতে চাই। আপনি যখন মার্জ কমিট রফতানি করবেন, তখন আপনাকে গিটকে বলতে হবে যে ভিন্নতা উত্পন্ন করতে পিতামাতার প্রতিশ্রুতিবদ্ধ। এছাড়াও, যদি আপনার মার্জটি দ্রুত-অগ্রসর হয় (দ্রুত-ফরোয়ার্ড সংযুক্তির man git-merge
বিবরণের জন্য "কীভাবে মার্জ কাজগুলি" বিভাগটি দেখুন) এটি কাজ করবে না তাই আপনাকে ব্যবহার করতে হবে--no-ff
মার্জ করার সময় বিকল্প। এখানে একটি উদাহরণ:
# on master
% git merge --no-ff --log -m "Optional commit message here" topic/branch/name
% git cvsexportcommit -w /path/to/cvs/checkout -u -p -c ORIG_HEAD HEAD
Git-cvsexportcommit এর ম্যান পেজে এই বিকল্পগুলির প্রত্যেকটির অর্থ কী তা আপনি দেখতে পাচ্ছেন । -w
আপনার গিট কনফিগারেশনে বিকল্পটি সেট করার বিকল্প আপনার কাছে রয়েছে:
% git config cvsexportcommit.cvsdir /path/to/cvs/checkout
যদি প্যাচটি যে কোনও কারণে ব্যর্থ হয় তবে আমার অভিজ্ঞতা হ'ল আপনি (দুর্ভাগ্যক্রমে) সম্ভবত পরিবর্তিত ফাইলগুলি ম্যানুয়ালি অনুলিপি করা এবং সিভিএস ক্লায়েন্ট ব্যবহার করে প্রতিশ্রুতি দেওয়া থেকে ভাল better এটি হওয়া উচিত নয়, তবে আপনি যদি নিশ্চিত হন master
যে আপনার বিষয় শাখায় মার্জ করার আগে সিভিএসের সাথে আপ-টু-ডেট রয়েছে।
যদি প্রতিশ্রুতিবদ্ধ কোনও কারণে (নেটওয়ার্ক / অনুমতি সংক্রান্ত সমস্যা ইত্যাদি) ব্যর্থ হয়, আপনি ত্রুটি আউটপুট শেষে আপনার টার্মিনালে মুদ্রিত কমান্ডটি নিতে পারেন এবং এটি আপনার সিভিএস ওয়ার্কিং ডিরেক্টরিতে কার্যকর করতে পারেন। এটি সাধারণত দেখতে এরকম কিছু দেখায়:
% cvs commit -F .msg file1 file2 file3 etc
পরের বার আপনি যখন git cvsimport
(কমপক্ষে 10 মিনিট অপেক্ষা) করবেন তখন আপনার রপ্তানি করা প্রতিশ্রুতিটির প্যাচটি আপনার স্থানীয় ভাণ্ডারে পুনরায় আমদানি করা উচিত। সিভিএসের কমিটের আলাদা টাইমস্ট্যাম্প এবং সম্ভবত আলাদা কমিটরের নাম থাকবে (আপনি cvsimport
উপরের লেখায় কোনও লেখক ফাইল সেট আপ করেছেন কিনা তার উপর নির্ভর করে) তাদের বিভিন্ন কমিট আইডি থাকবে ।
আপনার সিভিএস ক্লোন ক্লোনিং করা হচ্ছে
আপনার যদি একাধিক ব্যক্তির করণীয় প্রয়োজন হয় cvsimport
তবে সিভিসিম্পোর্ট সম্পাদন করে এমন একটি গিট রিপোজিটরি তৈরি করা এবং ক্লোন হিসাবে তৈরি অন্যান্য সমস্ত সংগ্রহস্থলগুলি তৈরি করা আরও দক্ষ। এটি পুরোপুরি কাজ করে এবং ক্লোন করা সংগ্রহস্থল উপরে বর্ণিত হিসাবে cvsexportcommits সম্পাদন করতে পারে। তবে একটি সাবধানবাণী রয়েছে। সিভিএস যেভাবে বিভিন্ন কমিট আইডি (উপরে বর্ণিত হয়েছে) দিয়ে ফিরে আসার কারণে আপনি চান না যে আপনার ক্লোন করা শাখা কেন্দ্রীয় গিট সংগ্রহস্থলটি ট্র্যাক করবে। ডিফল্টরূপে, এইভাবে git clone
আপনার সংগ্রহস্থলটি কনফিগার করে তবে এটি সহজে প্রতিকার পাওয়া যায়:
% git clone [CENTRAL_REPO_HERE]
% cd [NEW_GIT_REPO_DIR_HERE]
% git config --unset branch.master.remote
% git config --unset branch.master.merge
আপনি এই কনফিগারগুলি সরিয়ে দেওয়ার পরে, আপনাকে কেন্দ্রীয়ভাবে সংগ্রহস্থল থেকে নতুন কমিটগুলি টানতে চাইলে আপনাকে স্পষ্টভাবে বলতে হবে যে কোথায় এবং কী থেকে টানবেন:
% git pull origin master
সামগ্রিকভাবে, আমি এই কাজের প্রবাহটি বেশ পরিচালনাযোগ্য এবং গিটে সম্পূর্ণরূপে স্থানান্তরিত করার সময় "পরবর্তী সেরা জিনিস" হিসাবে খুঁজে পেয়েছি।