গিটফ্লো (Gitflow)

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

গিটফ্লো ওয়ার্কফ্লো একটি কড়া ব্রাঞ্চিং মডেল, যা প্রজেক্টের রিলিজ সাইকেলকে ঘিরে তৈরি। এটি বড় প্রজেক্ট ম্যানেজ করার জন্য একটি শক্তিশালী কাঠামো দেয়। বিশেষ করে নির্দিষ্ট সময়ে রিলিজ দেওয়া প্রকল্পের জন্য এবং Continuous Delivery (CD) এর মতো DevOps প্র্যাকটিসের জন্য এটি উপযোগী।

গিটফ্লো প্রতিটি ব্রাঞ্চের জন্য নির্দিষ্ট ভূমিকা ঠিক করে দেয় এবং কখন কীভাবে এগুলো একে অপরের সাথে মিশবে তা নির্ধারণ করে। এখানে আলাদা ব্রাঞ্চ ব্যবহার করা হয় প্রস্তুতি, রক্ষণাবেক্ষণ এবং রিলিজ সংরক্ষণ করার জন্য।

বাস্তবায়ন (Implementation)
1. ডেভেলপ (develop) এবং মাস্টার (master) ব্রাঞ্চ

সাধারণভাবে একটি মাস্টার ব্রাঞ্চ থাকার বদলে গিটফ্লো দুইটি প্রধান ব্রাঞ্চ ব্যবহার করে, যেগুলোর লাইফটাইম অসীম ধরা হয়।

Master Branch: প্রোডাকশন কোড থাকে এখানে। অফিসিয়াল রিলিজ ইতিহাস সংরক্ষিত হয় এই ব্রাঞ্চে।

Develop Branch: এখানে প্রি-প্রোডাকশন কোড থাকে। নতুন ফিচারগুলোর ইন্টিগ্রেশনের জন্য এটি ব্যবহৃত হয়।

Develop ব্রাঞ্চ তৈরি করা:

👉 গিটফ্লো এক্সটেনশন ছাড়া:

git branch develop
git push -u origin develop


👉 গিটফ্লো এক্সটেনশন দিয়ে:

git flow init

2. ফিচার (Feature) ব্রাঞ্চ

প্রতিটি নতুন ফিচার একটি আলাদা ব্রাঞ্চে তৈরি হয়। এগুলো develop ব্রাঞ্চ থেকে তৈরি হবে এবং কাজ শেষ হলে develop এ মার্জ করা হবে। কোনো ফিচার ব্রাঞ্চ সরাসরি master এর সাথে যুক্ত হবে না।

Feature ব্রাঞ্চ তৈরি করা:

👉 গিটফ্লো এক্সটেনশন ছাড়া:

git checkout develop
git checkout -b feature_branch


👉 গিটফ্লো এক্সটেনশন দিয়ে:

git flow feature start feature_branch


Feature ব্রাঞ্চ শেষ করা:

👉 গিটফ্লো এক্সটেনশন ছাড়া:

git checkout develop
git merge feature_branch


👉 গিটফ্লো এক্সটেনশন দিয়ে:

git flow feature finish feature_branch

3. রিলিজ (Release) ব্রাঞ্চ

যখন develop ব্রাঞ্চে পর্যাপ্ত ফিচার যুক্ত হয় (বা নির্ধারিত রিলিজ সময় চলে আসে), তখন develop থেকে একটি release ব্রাঞ্চ তৈরি হয়।

এই ব্রাঞ্চ তৈরি হওয়ার পর আর নতুন ফিচার যোগ করা যাবে না। শুধু বাগ ফিক্স, ডকুমেন্টেশন, এবং রিলিজ সংক্রান্ত পরিবর্তন করা যাবে। Release ব্রাঞ্চ শেষে master এবং develop – দুইটিতেই মার্জ হবে।

Release ব্রাঞ্চ তৈরি করা:

👉 গিটফ্লো এক্সটেনশন ছাড়া:

git checkout develop
git checkout -b release/0.1.0


👉 গিটফ্লো এক্সটেনশন দিয়ে:

git flow release start 0.1.0


Release ব্রাঞ্চ শেষ করা:

👉 গিটফ্লো এক্সটেনশন ছাড়া:

git checkout master
git merge release/0.1.0


👉 গিটফ্লো এক্সটেনশন দিয়ে:

git flow release finish 0.1.0

4. হটফিক্স (Hotfix) ব্রাঞ্চ

হঠাৎ প্রোডাকশনে কোনো সমস্যা ধরা পড়লে দ্রুত সমাধানের জন্য hotfix ব্রাঞ্চ তৈরি হয়। এটি সরাসরি master থেকে তৈরি হয়।

ফিক্স শেষ হলে এটি master এবং develop (বা বর্তমান release ব্রাঞ্চ) – উভয়েই মার্জ হবে। এরপর master এ নতুন ভার্সন ট্যাগ করা হবে।

Hotfix ব্রাঞ্চ তৈরি করা:

👉 গিটফ্লো এক্সটেনশন ছাড়া:

git checkout master
git checkout -b hotfix_branch


👉 গিটফ্লো এক্সটেনশন দিয়ে:

git flow hotfix start hotfix_branch


Hotfix ব্রাঞ্চ শেষ করা:

👉 গিটফ্লো এক্সটেনশন ছাড়া:

git checkout master
git merge hotfix_branch
git checkout develop
git merge hotfix_branch


👉 গিটফ্লো এক্সটেনশন দিয়ে:

git branch -D hotfix_branch
git flow hotfix finish hotfix_branch

সুবিধা (Advantages)

যেকোনো সময় প্রকল্পের ব্রাঞ্চের অবস্থা পরিষ্কার থাকে।

ব্রাঞ্চের নামকরণ নিয়মতান্ত্রিক হওয়ায় সহজে বোঝা যায়।

গিটফ্লো অনেক জনপ্রিয় টুলে এক্সটেনশনসহ সমর্থিত।

একাধিক প্রোডাকশন ভার্সন রক্ষণাবেক্ষণের জন্য উপযোগী।

রিলিজ-ভিত্তিক সফটওয়্যার ওয়ার্কফ্লোর জন্য আদর্শ।

প্রোডাকশনে হঠাৎ সমস্যার সমাধানের জন্য আলাদা চ্যানেল দেয়।

অসুবিধা (Disadvantages)

গিট ইতিহাস অনেক সময় জটিল হয়ে যায়।

master/develop বিভাজন Continuous Delivery বা Continuous Integration–এর জন্য জটিলতা বাড়ায়।

যদি একটাই প্রোডাকশন ভার্সন থাকে, তবে এটি ব্যবহার করা সুপারিশ করা হয় না।

সারসংক্ষেপ (Summary)

গিটফ্লো ওয়ার্কফ্লোর মূল ধাপগুলো হলো:

master থেকে একটি develop ব্রাঞ্চ তৈরি হয়।

নতুন ফিচার develop থেকে তৈরি হয়।

ফিচার শেষ হলে develop এ মার্জ হয়।

develop থেকে একটি release ব্রাঞ্চ তৈরি হয়।

release ব্রাঞ্চ শেষ হলে এটি master এবং develop – উভয়েই মার্জ হয়।

master এ কোনো সমস্যা হলে master থেকে hotfix ব্রাঞ্চ তৈরি হয়।

hotfix শেষ হলে এটি develop এবং master – উভয়েই মার্জ হয়।