Vivasoft-logo

৫.১ ডিস্ট্রিবিউটেড গিট – ডিস্ট্রিবিউটেড ওয়ার্কফ্লো

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

এই অধ্যায়ে, আপনি দেখবেন কিভাবে ডিস্ট্রিবিউটেড এনভায়রনমেন্ট-এ একজন কান্ট্রিবিউটর এবং ইন্টিগ্রেটর গিট ব্যবহার করতে পারেন। আপনি শিখবেন একটি প্রজেক্টে কিভাবে সফলভাবে কন্ট্রিবিউট করা যাই, যা আপনার এবং প্রজেক্ট মেন্টেনারের কাজ সহজ করবে, এছাড়াও আপনি শিখবেন কিভাবে একটি প্রজেক্ট একাধিক ডেভেলপারদের কন্ট্রিবিউশন নিয়ে মেইনটেইন করা যাই।

ডিস্ট্রিবিউটেড ওয়ার্কফ্লো

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

সেন্ট্রালাইজড ওয়ার্কফ্লো

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

ইন্টেগ্রেশন-ম্যানেজার ওয়ার্কফ্লো

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

  1. প্রজেক্টের পরিচালক তাদের পাবলিক রেপোজিটরীতে পুশ করে।
  2. কনট্রিবিউটর তার রেপোজিটরী ক্লোন করে এবং পরিবর্তন করে।
  3. কনট্রিবিউটর তার নিজস্ব পাবলিক কপিতে পুশ করে।
  4. কনট্রিবিউটর প্রকল্পের পরিচালককে তার পরিবর্তনগুলি পুল করার জন্য একটি ইমেল প্রেরণ করে।
  5. পরিচালক কনট্রিবিউটরের রেপোজিটরীকে একটি রিমোট হিসেবে যুক্ত করে এবং লোকালে মার্জ করে।
  6. পরিচালক মার্জ পরিবর্তনগুলি মূল রেপোজিটরীতে পুশ করে।
চিত্র 54. ইন্টেগ্রেশন-ম্যানেজার ওয়ার্কফ্লো
এটি GitHub বা GitLab এর মতো হাব-ভিত্তিক সরঞ্জামগুলির সাথে একটি খুব সাধারণ ওয়ার্কফ্লো, যেখানে একটি প্রজেক্টকে ফর্ক করা এবং নিজের পরিবর্তনগুলিকে সকলের দেখার জন্য নিজের ফর্কে পুশ দেওয়া সহজ। এই পদ্ধতির একটি প্রধান সুবিধা হল আপনি কাজ চালিয়ে যেতে পারেন, এবং মূল রিপোজিটরির রক্ষণাবেক্ষণকারী যেকোনো সময় আপনার পরিবর্তনগুলি পুল করতে পারে। কনট্রিবিউটরদের পরিবর্তনগুলি অন্তর্ভুক্ত করার জন্য প্রজেক্টের জন্য অপেক্ষা করতে হবে না —প্রত্যেক পক্ষ তাদের নিজস্ব গতিতে কাজ করতে পারে৷

ডিক্টেটর ও লুটেন্টেন্টস ওয়ার্কফ্লো

এটি একাধিক রিপোজিটোরী ওয়ার্কফ্লোরের একটি প্রতিবিম্ব। এটি সাধারণত শত শত সহযোগীদের সাথে বিশাল প্রকল্প দ্বারা ব্যবহৃত হয়; একটি বিখ্যাত উদাহরণ হল লিনাক্স কার্নেল। বিভিন্ন ইন্টিগ্রেশন ম্যানেজাররা রিপোজিটরির কিছু অংশের দায়িত্বে থাকে; তাদের লেফটেন্যান্ট বলা হয়। সমস্ত লেফটেন্যান্টদের একজন ইন্টিগ্রেশন ম্যানেজার থাকে যাকে বেনেভোলেন্ট ডিক্টেটর বলা হয়। বেনেভোলেন্ট ডিক্টেটর তাদের ডিরেক্টরি থেকে একটি রেফারেন্স রিপোজিটরি পুশ দেয় যেখান থেকে সমস্ত সহযোগীদের পুল করতে হয়।। প্রক্রিয়াটি এই ভাবে কাজ করে (বেনেভেলেন্ট ডিক্টেটর ওয়ের্কফ্লো দেখুন):

  1. নিয়মিত ডেভেলপাররা তাদের টপিক ব্রাঞ্চে কাজ করে এবং মাস্টারের উপরে তাদের কাজ রিবেস করে। মাস্টারের ব্রাঞ্চ হল রেফারেন্স রিপোজিটোরি যেখানে ডিক্টেটর পুশ করে।
  2. লেফটেন্যান্টরা ডেভেলপারদের বিষয় ব্রাঞ্চ গুলিকে তাদের মাস্টার ব্রাঞ্চ মার্জ করে।।
  3. ডিক্টেটর লেফটেন্যান্টদের মাস্টার ব্রাঞ্চ গুলিকে ডিক্টেটরদের মাস্টার ব্রাঞ্চে মার্জ করে।
  4. অবশেষে, ডিক্টেটর সেই মাস্টার ব্রাঞ্চকে রেফারেন্স রিপোজিটরিতে পুশ দেয় যাতে অন্যান্য ডেভেলপাররা এটিতে রিবেজ করতে পারে।
চিত্র 55. বেনেভেলেন্ট ডিক্টেটর ওয়ের্কফ্লো
এই ধরনের কর্মধারা প্রচলিত নয়, কিন্তু খুব বড় প্রকল্পে, বা উচ্চ স্তরের পরিবেশে উপযোগী হতে পারে। এটি প্রকল্পের নেতাকে (the dictator) এটা সাহায্য করে অনেক গুলা কাজ প্রতিনিধিত্ব করতে এবং অনেক গুলা পয়েন্ট থেকে আসা বড় উপসেট গুলা সংগ্রহ করে একত্রিত করার আগে।
নোট
মার্টিন ফোলার একটি নির্দেশিকা তৈরি করেছেন “প্যাটার্নস ফর ম্যানেজিং সোর্স কোড বিভাগ”। এই নির্দেশিকাটি সমস্ত সাধারণ গিট ওয়ার্কফ্লো কভার করে এবং কীভাবে/কখন সেগুলি ব্যবহার করতে হয় তা ব্যাখ্যা করে। এছাড়াও একটি বিভাগ আছে যা উচ্চ এবং নিম্ন ইন্টিগ্রেশন ফ্রিকোয়েন্সি তুলনা করে। https://martinfowler.com/articles/branching-patterns.html

কাজের পদ্ধতির সারাংশ

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