আপনার কখন শাখা করা উচিত?


উত্তর:


59

শাখা প্রশাখার বিভিন্ন ব্যবহার রয়েছে। সর্বাধিক সাধারণ ব্যবহারগুলির মধ্যে একটি হল এমন প্রকল্পগুলিকে পৃথক করার জন্য যা একসময় সাধারণ কোড বেস ছিল। মূল ট্রাঙ্ককে প্রভাবিত না করে আপনার কোডটি নিয়ে এটি পরীক্ষামূলকভাবে কার্যকর।

সাধারণভাবে, আপনি দুটি শাখার প্রকার দেখতে পাবেন:

  • বৈশিষ্ট্য শাখা: যদি কোনও নির্দিষ্ট বৈশিষ্ট্য যথেষ্ট পরিমাণে বিঘ্নিত হয় তবে আপনি চান না যে পুরো বিকাশকারী দলটি প্রাথমিক পর্যায়ে প্রভাবিত হোক, আপনি একটি শাখা তৈরি করতে পারেন যার ভিত্তিতে এই কাজটি করা উচিত।

  • ফিক্সেস শাখা: মূল ট্রাঙ্কে বিকাশ চলতে থাকলে, সফ্টওয়্যারটির সর্বশেষ প্রকাশিত সংস্করণে ফিক্সগুলি ধরে রাখতে একটি ফিক্স শাখা তৈরি করা যেতে পারে।

আপনি নীচের নিবন্ধটি পরীক্ষা করতে আগ্রহী হতে পারেন, যা শাখার নীতিগুলি ব্যাখ্যা করে এবং কখন সেগুলি ব্যবহার করবে:


আপনার উল্লিখিত সাধারণ ব্যবহার আমি কখনও শুনিনি বা ভাবি নি তবে এটি একটি দুর্দান্ত ধারণা cool আমি আসন্ন প্রকল্পে সত্যিই এটি ব্যবহার করতে পারেন। এটা ইশারা জন্য ধন্যবাদ।
নীলস রিডিম্যান

82

সাধারণ শব্দে, শাখা প্রশাখার মূল উদ্দেশ্য (একটি ভিসিএস - সংস্করণ নিয়ন্ত্রণ ব্যবস্থা - বৈশিষ্ট্য) কোড বিচ্ছিন্নতা অর্জন

আপনার কমপক্ষে একটি আছে শাখা রয়েছে যা অনুক্রমিক বিকাশের জন্য পর্যাপ্ত হতে পারে এবং একই অনন্য শাখায় রেকর্ডিং (প্রতিশ্রুতিবদ্ধ) হওয়ার জন্য অনেকগুলি কাজের জন্য ব্যবহৃত হয়।

তবে সেই মডেলটি তার সীমাটি দ্রুত দেখায়:

যখন আপনার কোনও বিকাশের প্রচেষ্টা রয়েছে (রিফ্যাক্টরিং, বিবর্তন, বাগ-সংশোধন, ...) এবং আপনি বুঝতে পারবেন যে আপনি আপনার বর্তমান উন্নয়ন শাখার চেয়ে একই শাখায় নিরাপদে সেই পরিবর্তনগুলি করতে পারবেন না (কারণ আপনি এপিআই ভেঙে ফেলবেন, বা কোডটি ভেঙে দেবেন সবকিছু), তারপরে আপনার অন্য একটি শাখা দরকার ।
( বিচ্ছিন্ন করতে সেই নতুন কোডটি করতে, যদিও দুটি কোড সেট পরে মার্জ করা হবে)

সুতরাং এখনই এটি আপনার উত্তর:
আপনি যখনই একটি শাখায় দুটি বিকাশের প্রচেষ্টা অনুসরণ করতে এবং রেকর্ড করতে না পারেন তখনই আপনার শাখা করা উচিত।
(বজায় রাখার জন্য মারাত্মক জটিল ইতিহাস না থাকলে)।


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

("ভনসি" নামে পরিচিত একটি শাখা অন্য বিকাশকারীকে কিছুই বোঝায় না: "ভনসি" যদি প্রকল্পটি ছেড়ে দেয় তবে কী করা উচিত? আপনি
"বাগফিক্স_212" নামক একটি শাখা উদাহরণস্বরূপ বাগ ট্র্যাকিং সিস্টেমের প্রসঙ্গে ব্যাখ্যা করতে পারেন) , এবং যে কোনও বিকাশকারী এটির সাথে তার কী করার কথা সে সম্পর্কে কমপক্ষে কিছু ধারণা নিয়ে এটি ব্যবহার করতে পারে)

একটি শাখা একটি ট্যাগ নয় (এসভিএন একটি রিভিশন সিস্টেম যা সস্তা ফাইলের অনুলিপি সহ ডিরেক্টরিগুলির মাধ্যমে শাখা করা এবং ট্যাগ করার মতো সংস্করণ বৈশিষ্ট্যটি প্রস্তাব করার চেষ্টা করে : এর অর্থ এই নয় যে কোনও ট্যাগটি একটি শাখা)

একটি শাখা সংজ্ঞায়িত করার অর্থ হ'ল মার্জ ওয়ার্কফ্লো সংজ্ঞা দেওয়া : আপনার শাখাটি সম্পন্ন করার পরে আপনাকে কোথায় মার্জ করতে হবে তা জানতে হবে।
তার জন্য, প্রাকটিক্যাল পার্ফোর্স (লরা উইংগার্ড - ও'রেলি) অধ্যায় 7 হ'ল বিভিন্ন ধরণের শাখাগুলির মধ্যে কর্মপ্রবাহকে একীভূত করার জন্য একটি ভাল ভূমিকা (ভিসিএস অজ্ঞেয়াদি): "" কীভাবে সফ্টওয়্যার বিবর্তিত হয় "(পিডিএফ)

এটি কোডলাইন শব্দটি সংজ্ঞায়িত করেছে (শাখা যা কোডের উল্লেখযোগ্য বিবর্তনের পদক্ষেপগুলি রেকর্ড করে, নির্দিষ্ট পয়েন্টগুলিতে ট্যাগের মাধ্যমে বা শাখায় গুরুত্বপূর্ণ একীকরণের মাধ্যমে)

এটি মূললাইন মডেলটি প্রকাশ করেছে (রিলিজেস রেকর্ড করার জন্য একটি কেন্দ্রীয় কোডলাইন), এবং শাখা প্রশাখার বিভিন্ন উদ্দেশ্য বর্ণনা করে:

  • সক্রিয় বিকাশ স্রোত : ক্রমাগত বিভিন্ন বিকাশ ঘটলে একটি অবিচ্ছিন্ন কোডলাইন
  • কার্য শাখা : আরও নির্দিষ্ট কাজের জন্য স্বল্প-স্থায়ী শাখা (বাগ-ফিক্স একটি ক্লাসিক একটি, তবে আপনি যে সংযোজন প্রয়াসকে সম্পূর্ণ জটিল বলে জানেন তার জন্য আপনি একটি শাখাও সংজ্ঞায়িত করতে পারেন: আপনি সেই কার্য শাখায় মার্জ, কমিট এবং পরীক্ষা করতে পারেন মূল বর্তমান উন্নয়ন শাখার জন্য সমস্যা প্রবর্তন না করে)
  • মঞ্চায়ন শাখা : কিছু প্রাক-উত্পাদন নির্দিষ্ট ডেটা বা কনফিগার ফাইল সহ একটি প্রকাশের প্রস্তুতির জন্য।
  • বেসরকারী শাখা, অ্যাডহক শাখা এবং স্পার্স শাখা : খুব ছোট কাজের জন্য, কেবল আনুষ্ঠানিক সমাপ্তি বা পরীক্ষার পর্যালোচনার জন্য অপেক্ষা না করে কিছু কাজ অগ্রগতিতে সক্ষম করতে সক্ষম হতে।
    এটি "তাড়াতাড়ি কমিট করতে, প্রায়শই কমিট" করতে দেয়।

ভিসিএসের চারপাশে অন্যান্য আকর্ষণীয় ধারণা: মূল ধারণাগুলি
(ক্লিয়ারক্যাস সম্পর্কে মূলত, তবে কোনও ভিসিএসের জন্য বৈধ)


19

একবিংশ শতাব্দীর সমস্ত এসসিএম আপনাকে বলছে:

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

তুমি পাও:

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

সরঞ্জামগুলি এটি করতে পারে:

যে সরঞ্জামগুলি এটি করতে পারে না:

  • SVN
  • জীবনবৃত্তান্ত
  • VSS
  • টিএফএস
  • নেহাৎ

1
আপনি এসভিএন দিয়ে এটি করতে পারবেন না কেন ??
yegor256

4
এসভিএন ভাল সংশ্লেষ হয় না। সঠিকভাবে মার্জ ট্র্যাকিংয়ের অভাবে। এছাড়াও যেহেতু একটি শাখা তৈরি করা আমি যেটা দেখিয়েছিলাম তার মতো সস্তা নয়, এটি সত্যিকারের পরিস্থিতিতে একটি দুঃস্বপ্ন হয়ে যায়।
পাবলো

আরও ভাল ট্রেসেবিলিটি: আপনি চান আপনি যতবার প্রতিশ্রুতিবদ্ধ করতে চান? কাজটি কোনও জটিল বৈশিষ্ট্য না হলে একবারে প্রতি কাজই কি যথেষ্ট নয়? এছাড়াও লোকেদের বাগগুলি মূল শাখায় সহজেই তাদের পথ তৈরি করতে পারে এবং যখন তারা একত্রিত হয় ঠিক তখনই এটি "স্থিতিশীল" নয় এবং "নিরাপদ" নয়।
পাইমন সামাদিয়ান

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

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

8

এটি আপনি যে এসসিএম সরঞ্জামটি ব্যবহার করছেন তার উপরও নির্ভর করে। আধুনিক এসসিএম (গিট, পার্কিয়াল ইত্যাদি) যখনই প্রয়োজন হবে তখন শাখা তৈরি এবং ধ্বংস করা ক্রমশ সহজ করে তোলে। এটি আপনাকে উদাহরণস্বরূপ, আপনি যে বাগটিতে কাজ করছেন তার প্রতি একটি শাখা তৈরি করতে দেয়। আপনি একবার আপনার ফলাফলগুলি ট্রাঙ্কে মার্জ করে দিলে আপনি শাখাটি বাতিল করেন।

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


5

আপনার কোডবেজে যখন আপনার গুরুত্বপূর্ণ এবং / অথবা পরীক্ষামূলক পরিবর্তনগুলি করা দরকার, বিশেষত আপনি যদি ট্রাঙ্ককে প্রভাবিত না করে মাঝারি পরিবর্তন করতে চান।


5

এটি আপনি কী ধরণের এসসিএম ব্যবহার করছেন তার উপর নির্ভর করে।

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

দস্তাবেজ (ছোট এবং পাঠযোগ্য) যে সবচেয়ে সাহায্য করেছে আমাকে বুঝতে কি বিতরণ করা সিস্টেমের মধ্যে মধ্যে চালু ছিল হল: UnderstandingMercurial

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

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


3

আমি পেরফোর্সে লরা উইঙ্গার্ড এবং ক্রিস্টোফার সেওয়াল্ডের পরামর্শটি সত্যিই সংক্ষিপ্ত এবং দরকারী:

* Branch only when necessary.
* Don't copy when you mean to branch.
* Branch on incompatible policy.
* Branch late.
* Branch, instead of freeze.

তাদের প্রত্যেকের এবং অন্যান্য সেরা অনুশীলনের বিশদ বিবরণের জন্য http://www.perfor.com/sites/default/files/pdf/perforce-best-practices.pdf দেখুন ।


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

2015 সালে প্রতিক্রিয়া! শাখা এড়ানোর কারণ হ'ল মার্জ হওয়ার প্রয়োজনীয়তা এড়ানো - কারণ পারফফোর্সের টাস্ক / টপিক শাখা ছিল না (আপনি স্ট্রিমগুলিতে "টাস্ক ব্রাঞ্চ" করতে পারেন - পেরফোর্সে আমরা একে "টাস্ক স্ট্রিম" বলি others অন্যরা যেমন উল্লেখ করেছেন - ব্রাঞ্চিংটি ডিভিসিএসে জড়িত এবং প্রশ্নটি অযৌক্তিক হয়ে যায় becomes - দুই ভুবনের সেরা).
লেস্টার চেউং

2

শাখা প্রশাখার বিভিন্ন উদ্দেশ্য রয়েছে:

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

1

শাখা প্রশাখার প্রয়োজনীয়তাও দেখা দিতে পারে:

  • আপনি যখন কোনও নির্দিষ্ট গ্রাহককে একটি হটফিক্স সরবরাহ করতে চান (গুরুত্বপূর্ণ বলুন) এবং এই সিদ্ধান্তটি ভবিষ্যতে প্রকাশের অংশ হবে কিনা তা আপনি নিশ্চিত নন


  • 1

    যখনই আপনার মনে হবে।

    আপনি সম্ভবত খুব ঘন ঘন হবেন না যদি আপনি একটি কেন্দ্রিক এসসিএমের সাথে কাজ করেন যেহেতু শাখাগুলি সরকারী ভান্ডারের অংশ, এবং এটি সত্যিই অনেক পরীক্ষাকে আমন্ত্রণ জানায় না, মার্জগুলি সত্যই আঘাতের কথা উল্লেখ না করে।

    OTOH, বিতরণকৃত এসসিএমগুলিতে একটি শাখা এবং চেকআউটের মধ্যে কোনও প্রযুক্তিগত পার্থক্য নেই এবং মার্জগুলি অনেক সহজ। আপনি প্রায়শই পুরোপুরি শাখা প্রশাখার মতো অনুভব করবেন।


    0

    আপনার বর্তমান শাখার উপর ভিত্তি করে যখন আপনাকে পরিবর্তনগুলি করা দরকার তখন সেই শাখা থেকে পরবর্তী প্রকাশের জন্য লক্ষ্যযুক্ত নয় (এবং আগে নয়)।

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


    0

    সমস্ত প্রযুক্তি একপাশে রেখে .....

    শাখা যখন আপনি এটি ফিরে একীভূত করা আরও সহজ জানেন!

    মনে রাখবেন যে কোনও প্রকল্পে কাজটি কীভাবে করা হয় তার সাথে মার্জিং সর্বদা প্রভাবিত হবে।

    এটি অর্জনের পরে অন্যান্য সমস্ত তৃতীয় সমস্যাগুলি খেলতে আসবে।

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