পার্শ্ববর্তী বা গিট থেকে সিভিএসে পুনর্বিবেচনার ইতিহাস রপ্তানি করবেন কীভাবে?


100

আমি সিভিএস ব্যবহার করে এমন একটি প্রকল্প থেকে কোডে অন্য ব্যক্তির সাথে কাজ করব। আমরা আমাদের কাজ করতে একটি বিতরণকৃত ভিসিএস ব্যবহার করতে চাই এবং যখন আমরা শেষ করি বা হয়ত প্রতি একবারে আমরা আমাদের কোড এবং আমাদের সংশোধন ইতিহাসের সমস্ত সিভিতে প্রতিশ্রুতিবদ্ধ করতে চাই। আমাদের প্রকল্পের সিভিএস রেপোতে লেখার অ্যাক্সেস নেই তাই আমরা খুব ঘন ঘন কমিটমেন্ট করতে পারি না। সিভিএসে আমাদের সংশোধন ইতিহাস রফতানি করতে আমরা কোন সরঞ্জামটি ব্যবহার করতে পারি? বর্তমানে আমরা গিট বা মার্উরিয়াল ব্যবহার করার কথা ভাবছিলাম তবে আমরা রফতানি আরও সহজ করতে পারলে আমরা আর একটি বিতরণকৃত ভিসিএস ব্যবহার করতে পারি।


আপনি যখন "বিতরণকৃত সিভিএস" বলছেন তখন আমার মনে হয় আপনার অর্থ "বিতরণিত ভিসিএস," বা "ডিভিসিএস," যার অর্থ "বিতরণযোগ্য সংস্করণ নিয়ন্ত্রণ ব্যবস্থা" for
প্যাট্রিক ম্যাকএলহানি

আমি একটি বিতরণ সংস্করণ নিয়ন্ত্রণ সিস্টেম বলতে চাই।
তাতসুহিরোসাতো

উত্তর:


237

সৌভাগ্যক্রমে আমাদের মধ্যে যারা এখনও সিভিএস ব্যবহার করতে বাধ্য হয়েছেন তাদের জন্য গিটটি আপনি যা করতে চাইছেন ঠিক তা করার জন্য বেশ ভাল সরঞ্জাম সরবরাহ করে। আমার পরামর্শগুলি (এবং আমরা এখানে $ কার্যক্রমে কী করি):

প্রাথমিক ক্লোন তৈরি করা হচ্ছে

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

যেভাবেই হোক, দুটি বিষয় মনে রাখতে হবে:

  1. আপনার গিট সংগ্রহস্থলের মূল ডিরেক্টরিতে আছেন তা নিশ্চিত করুন in আপনি অন্য কোথাও থাকলে, এটি একটি নতুন কাজ করার চেষ্টা cvsimportকরবে যা আবার চিরতরে লাগবে।
  2. আপনি আপনার 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

সামগ্রিকভাবে, আমি এই কাজের প্রবাহটি বেশ পরিচালনাযোগ্য এবং গিটে সম্পূর্ণরূপে স্থানান্তরিত করার সময় "পরবর্তী সেরা জিনিস" হিসাবে খুঁজে পেয়েছি।


3
ধন্যবাদ. এটি আমাকে প্রচুর পরিমাণে সহায়তা করেছে, বিশেষত সিভিএসের একক প্রতিশ্রুতিতে পরিবর্তনগুলি বান্ডিল করতে একটি নন-ফাস্টফোরওয়ার্ড মার্জ ব্যবহার সম্পর্কে পরামর্শ।
স্কিপোপ্পি

8
রেকর্ডের জন্য, গিট-সিভিসিম্পোর্টের জন্য আপনি যে -A বিকল্পটি ব্যবহারের পরামর্শ দিচ্ছেন সেটি ম্যানপেজে উল্লেখ করা হয়েছে "প্রস্তাবিত নয় ... আপনি যদি গিট-সিভিএসেক্সপোর্টপোর্ট (1) দিয়ে পরে আবার সিভিএসে পরিবর্তন রপ্তানি করতে চান।" আমার ক্ষেত্রে, লেখকরা যেমনভাবে বেরিয়ে আসেন তেমন আমি পছন্দ করি।
skiphoppy

2
টিপস জন্য ধন্যবাদ। আমার করা সহজ কাজটি হ'ল আমার .gitconfig- এ [ওরফে] এর অধীনে "cvs =! Git cvsimport -k -a" যুক্ত করুন। এটি এটিকে এমন করে তোলে যাতে "গিট সিভিএস" টিটিআরটি করে (গাছের উপরে থেকে)।
bstpierre

1
আপনি যদি git cvsimportডেবিয়ান চেষ্টা থেকে নিখোঁজ হনapt-get install git-cvs
টিনো

5
ম্যাক ওএসএক্স mavricks সম্পূর্ণভাবে CVS অভাব আছে এবং মনে হচ্ছে যে Git cvsimport CVS উপর নির্ভর করে Initialized empty Git repository in /Users/gus/projects/foo/foobar/.git/ Can't exec "cvsps": No such file or directory at /Applications/Xcode.app/Contents/Developer/usr/libexec/git-core/git-cvsimport line 777. Could not start cvsps: No such file or directory git cvsimport: fatal: cvsps reported errorতাই দুঃখিতভাবে এই জীবনবৃত্তান্ত অভাবে প্রায় আপনি পাবেন না :(
গাস

22

আপনার সিভিসিম্পোর্টকে অন্ধভাবে বিশ্বাস করা উচিত নয় এবং আমদানি করা গাছ সিভিএস রেপোর সাথে মিল রয়েছে কিনা তা পরীক্ষা করা উচিত । আমি গ্রহন সিভিএসের প্লাগ-ইন ব্যবহার করে নতুন প্রকল্পটি ভাগ করে এটি করেছি এবং দেখেছি যে এখানে অসঙ্গতি রয়েছে is

একই প্রতিশ্রুতি বার্তার মাধ্যমে এক মিনিটেরও কম সময়ে করা দুটি কমিট (একটি ভুলভাবে মুছে ফেলা ফাইলটিকে ফিরিয়ে আনার জন্য) একটি বড় প্রতিশ্রুতিবদ্ধ করা হয়েছিল, যার ফলস্বরূপ গাছ থেকে নিখোঁজ হওয়া ফাইল ..

আমি 'ফুজ' পরামিতিটি এক মিনিটেরও কম পরিবর্তন করে এই সমস্যার সমাধান করতে সক্ষম হয়েছি।

উদাহরণ:

% git cvsimport -d $CVSROOT -C dir_to_create -r cvs -k \
  -A /path/to/authors/file cvs_module_to_checkout -z 15

নীচের লাইন: আমদানির পরে আপনার গাছ পরীক্ষা করুন


আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.