ব্রাঞ্চিং অবিচ্ছিন্ন একীকরণ বিরতি?


18

আমি মনে করি এই নিবন্ধটি, একটি সফল গিট ব্রাঞ্চিং মডেল , অভিজ্ঞ ডিভিসিএস ব্যবহারকারীদের মধ্যে খুব সুপরিচিত।

আমি hgবেশিরভাগ ক্ষেত্রেই ব্যবহার করি তবে আমি বিতর্ক করব যে কোনও ডিভিসিএসের জন্য এই আলোচনাটি ঠিক is

আমাদের বর্তমান কর্মপ্রবাহ হ'ল প্রতিটি বিকাশকারী মাস্টার রেপো ক্লোন করে। আমরা আমাদের নিজস্ব স্থানীয় রেপোতে কোড লিখি, পরীক্ষা চালায় এবং যদি ভাল হয় তবে মাস্টারের কাছে চলে যায় to

সুতরাং আমরা জেনকিন্সের মতো সিআই সার্ভার সেটআপ করতে এবং ভবিষ্যতের প্রভিশন সিস্টেম (শেফ, পুতুল, জবাবদিহিতা ইত্যাদি) দিয়ে আমাদের ওয়ার্কফ্লো উন্নত করতে চাই।

আসল অংশ

ভাল, উপরের মডেলটি উপস্থাপন করে দুর্দান্ত কাজ করে তবে শাখাগুলি সিআই ভাঙ্গতে পারে। বৈশিষ্ট্য শাখাটি developmentসিআই তৈরি করা এবং মসৃণ, মসৃণ করতে সঠিক হতে, নিবন্ধের সাথে (নিবন্ধ অনুযায়ী এটি শাখা হবে) সাথে সিঙ্ক করা উচিত ?

বলুন অ্যালিস এবং বব দুটি বৈশিষ্ট্যে কাজ করছেন। কিন্তু পরের দিন অ্যালিস করা হয়। বব এর বৈশিষ্ট্যটি এক সপ্তাহ সময় নেয়। বব শেষ হওয়ার পরে, তার পরিবর্তনগুলি তারিখের বাইরে (সম্ভবত অ্যালিস রেফ্যাক্টরড / কিছু শ্রেণীর নাম বদলে)।

একটি সমাধান হ'ল প্রতিটি সকালে বিকাশকারীদের অবশ্যই master/originকোনও পরিবর্তন আছে কিনা তা পরীক্ষা করতে হবে । যদি অ্যালিস কমিট করে, ববকে তার কর্মক্ষেত্রে টানতে এবং একত্রিত করা উচিত যাতে তার বৈশিষ্ট্য শাখাটি আপ টু ডেট।

  1. এটি কি ভাল উপায়?
  2. এই শাখাগুলি কি মাস্টার রেপোতে থাকা উচিত (স্থানীয় ক্লোন নয়?) মানে প্রতিটি বিকাশকারীকে কি গিটহাব / বিটবকেটে মাস্টার রেপোতে বিশেষাধিকার দেওয়া উচিত যাতে তারা একটি নতুন শাখা তৈরি করতে পারে? নাকি এটি স্থানীয়ভাবে করা হয়?
  3. শেষ অবধি, নিবন্ধটি দ্বারা উপস্থাপিত মডেলগুলির সিআই ভাঙ্গা উচিত যদি শাখাগুলির সাথে সিঙ্ক হয় না origin/master। যেহেতু আমরা রাতের বেলা বিল্ডিং করতে চাই, বিকাশকারীদের কাজ ছেড়ে যাওয়ার আগে টানা এবং একত্রীকরণ করা উচিত এবং প্রতিটি বৈশিষ্ট্য শাখায় সিআই রান চালানো উচিত?

উত্তর:


12

প্রথমত, বৈশিষ্ট্য শাখার ব্যবহার (কোনও বৈশিষ্ট্যটিতে করা কাজকে আলাদা করতে) এবং সিআই (সংঘবদ্ধ হওয়ার সাথে সাথে ইন্টিগ্রেশন সমস্যাগুলি খুঁজে পাওয়ার জন্য) কিছুটা দ্বিধা-দ্বন্দ্বে রয়েছে।

আমার মতে, বৈশিষ্ট্যযুক্ত শাখায় সিআই চালানো সময়ের অপচয় a বৈশিষ্ট্য শাখাগুলি ঘন ঘন আসার সাথে সাথে সিআই টুলিংটি বারবার পুনরায় কনফিগার করতে হবে। এবং সেই শাখার জন্য যা সম্ভবত সম্ভবত এক বা দুটি উত্স থেকে আপডেট আসে যা একটি সিআই সিস্টেম সনাক্তকরণ বোঝাতে সমস্যাগুলি এড়াতে তাদের চেক-ইনগুলি সমন্বিত করে।
সুতরাং, মাস্টার সংগ্রহস্থল সার্ভারে বৈশিষ্ট্যগুলি শাখা থাকার কোনও মানে নেই point

প্রশ্ন 1 এবং 3 হিসাবে: এটি যখন তাদের বৈশিষ্ট্য-শাখাটিকে এতে মিশ্রিত করে তখন প্রধান বিকাশকারী শাখার বিল্ডটি ভেঙে না যায় তা নিশ্চিত করা বিকাশের দায়িত্ব। তারা এটি কীভাবে করে তা তাদের সমস্যা, তবে দুটি সম্ভাব্য উপায় হ'ল:

  • প্রধান বিকাশ শাখায় করা নিয়মিত ভিত্তিতে বৈশিষ্ট্য শাখায় করা পরিবর্তনগুলি টানুন (যেমন প্রতিদিন)
  • বৈশিষ্ট্যটি সম্পন্ন হওয়ার পরে, প্রধান বিকাশ শাখাকে বৈশিষ্ট্য শাখায় মার্জ করুন এবং মার্জ ফলাফলটি মূল বিকাশ শাখায় চাপ দিন।

উভয় ক্ষেত্রেই, সুস্পষ্ট ইন্টিগ্রেশন ইস্যুগুলি (যেমন নামকরণের ক্লাস / ফাইলগুলি) বৈশিষ্ট্য শাখায় পাওয়া যায় এবং প্রথমে স্থির করা হয়। আরও সূক্ষ্ম সমস্যাগুলি সম্ভবত তখনই দেখা যায় যখন রাত্রে বিল্ড চালানো হয় এবং সেখানে স্থির করা উচিত।


আমি সম্মত হই না যে বৈশিষ্ট্য শাখার ব্যবহার সিআই ধারণার সাথে (সামান্য) মতবিরোধে রয়েছে। তবে, এমন একটি সিআই সিস্টেম তৈরি করা সম্ভব যা বৈশিষ্ট্য শাখায় চলার জন্য পুনরায় কনফিগারেশন প্রয়োজন হয় না। (আমি অতীতে কিছু সাধারণ অজগর স্ক্রিপ্ট সহ এটি করেছি) এবং এটি কার্যকর হতে পারে যখন আপনার "বৈশিষ্ট্য" শাখাগুলি বাস্তবে রিলিজের স্থায়িত্ব শাখা হিসাবে ব্যবহৃত হয়, যেখানে সিআই একেবারে প্রয়োজনীয়।
উইলিয়াম পায়েেন

1
প্রকৃতপক্ষে, আমি মনে করি যে আমাদের দুটি "কেন্দ্রীয়" শাখা দরকার - একটি "থ্রোওয়ে_ইন্টিগ্রেশন" শাখা হিসাবে একটি যা বিশুদ্ধভাবে বিকাশের অধীনে বৈশিষ্ট্যগুলির তাত্ক্ষণিকভাবে একীকরণ-পরীক্ষা পরীক্ষা হিসাবে উপস্থিত এবং অন্য একটি "মাস্টার" বা "স্থিতিশীল" শাখা যা তারা স্থিতিশীলতা / পরিপক্কতার একটি নির্দিষ্ট স্তরে পৌঁছানোর পরে বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে। বিকাশকারীরা দ্বিতীয় "স্থিতিশীল" / "মাস্টার" শাখা থেকে কাজ করার জন্য স্থিতিশীল কোড টানেন, এবং প্রথম "অস্থির" / "থ্রোওয়ে_ইন্টিগ্রেশন" শাখায় ঘন ঘন পরিবর্তনগুলিকে একত্রিত করুন এবং পুশ করুন। অবশ্যই উভয় শাখায় সিআই পরীক্ষা চালানো উচিত।
উইলিয়াম পায়েেন


5

1 এর প্রতিক্রিয়া)

যে কোনও উপায়ে কাজ করা ভাল উপায়। তবে : ধারাবাহিক সংহতকরণের পুরো ভিত্তিটি ধারাবাহিকভাবে সংহত করা । ধারণাটি হ'ল কেবলমাত্র যত তাড়াতাড়ি সম্ভব ইন্টিগ্রেশন বাগগুলি ধরা হবে না, তবে বিকাশ প্রতিক্রিয়া চক্রের মধ্যে - যেমন পরীক্ষার অধীনে কোডের সমস্ত বিবরণগুলি বিকাশকারীর স্বল্প-মেয়াদী মেমরির মধ্যে রয়েছে যা পরিবর্তনগুলি করে। এর অর্থ হ'ল, সাধারণ পরিস্থিতিতে, প্রতিটি পরিস্থিতিতে প্রতিশ্রুতিবদ্ধ বৈশিষ্ট্যের শাখাগুলি জুড়ে কাজটি সংহত করতে হবে - সম্ভবত প্রতি 15 মিনিট বা তারও বেশি পরে। পুনরাবৃত্তি করার জন্য: অবিচ্ছিন্ন ইন্টিগ্রেশনের মূল উদ্দেশ্য হ'ল ইন্টিগ্রেশন বাগগুলি প্রকাশ করা যখন সমস্ত বিবরণ বিকাশকারী (গুলি) এর স্বল্প-মেয়াদী মেমরির মধ্যে থাকে making

2)

বেশিরভাগ ক্ষেত্রে, শাখাগুলি মারকুরিয়ালে ক্লোনিং সংগ্রহগুলি তৈরি করে তৈরি করা হয়, সুতরাং আপনার প্রতিটি বিকাশকারীকে মাস্টার রেপোগুলিতে বিশেষাধিকার দেওয়ার দরকার নেই। আপনি সম্ভবত, বিকাশকারীদের অবিচ্ছিন্ন ইন্টিগ্রেশন সার্ভারে ক্লোন রেপো তৈরির ক্ষমতা দিতে চান, কারণ স্থানীয়ভাবে পরীক্ষা চালানো সবসময় সম্ভব হয় না। (আমার একবার সিআই সিস্টেম ছিল যেখানে ইউনিট পরীক্ষাগুলি 128 কোর ক্লাস্টারে চালাতে 8 ঘন্টা সময় নেয়) - বলা বাহুল্য, ডেভেলপাররা স্থানীয়ভাবে পরীক্ষা চালাতে পারেনি।

3)

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


1
"বেশিরভাগ ক্ষেত্রে, সংগ্রহশালা ক্লোনিংয়ের মাধ্যমে মার্চুরিয়ালে শাখাগুলি তৈরি করা হয়" - এটি ২০১৩ সালে সত্য হতে পারে তবে আজকাল, মার্চুরিয়াল বুকমার্কগুলি নাম ছাড়া সমস্ত ক্ষেত্রে গিট শাখার সমতুল্য equivalent
কেভিন

@ কেভিন: আপনি সম্ভবত ঠিকই আছেন। আমি উপরের প্রতিক্রিয়াটি লেখার প্রায় এক মাস পরে ফেব্রুয়ারি '13 সাল থেকে গিট (প্রায়) একচেটিয়াভাবে ব্যবহার করছি ... সুতরাং মার্চুরিয়ালের পরে কী পরিবর্তন হয়েছে সে সম্পর্কে আমি বিশেষভাবে আপ-টু ডেট নেই।
উইলিয়াম পায়েেন

1

আপনি এটি কীভাবে করতে পারেন তা এখানে: বৈশিষ্ট্যযুক্ত ব্রাঞ্চিং।

  1. যে কোনও নতুন কাজের জন্য (বাগফিক্স, বৈশিষ্ট্য ইত্যাদি) একটি নতুন শাখা শুরু করুন (উদাহরণস্বরূপ বাগফিক্স-টিকিট १२৩-দ্য_থিংটি_ব্রেকস)
  2. আপনি কাজ করার সময় অবিচ্ছিন্নভাবে আপডেট করুন এবং ডিফল্ট (বা গিটারে মাস্টার) আপনার বৈশিষ্ট্য শাখায় মার্জ করুন । এটি আপনাকে ডিফল্ট শাখায় কাজ না করে আপনার শাখাটি আপডেট করতে সহায়তা করে
  3. যখন আপনার বৈশিষ্ট্যটি প্রস্তুত হয় এবং আপনার ইউনিট পরীক্ষাগুলি পাস হয়ে যায় , তারপরে আবার আপনার শাখায় ডিফল্টটি টানুন এবং মার্জ করুন, আপনার শাখাটি বন্ধ করুন এবং মার্জ না করে এটিকে চাপ দিন , আপনার ইন্টিগ্রেটারটি নতুন মাথাটি লক্ষ্য করবে এবং এটি একটি বন্ধ শাখা, সুতরাং সে / সে এটি সংহত করার যত্ন নেবে। আপনার যদি কোনও ইন্টিগ্রেটার না থাকে তবে ডিফল্টতে স্যুইচ করুন এবং আপনার বৈশিষ্ট্য শাখাকে ডিফল্টে মার্জ করুন

এখানে গুরুত্বপূর্ণ বিষয় হ'ল আপনি যখন আপনার বৈশিষ্ট্য শাখাটিকে এতে মিশ্রিত করবেন তখন আপনার ডিফল্ট শাখায় 0 টি বিবাদ হবে এবং আপনার সমস্ত পরীক্ষা পাস হবে

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


আপনি বরং অर्थোগোনাল জিনিসগুলি মিশ্রিত এবং প্রতিস্থাপন করেন। 0 মার্জ সংঘাত! = 0 টি ত্রুটিযুক্ত ইউনিট-পরীক্ষা, সফল মার্জ! = সফল কোড
অলস ব্যাজার

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