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