Feature Branch — হল Git-এ শাখা তৈরির একটি কৌশল যেখানে প্রতিটি নতুন বৈশিষ্ট্য মূল কোড থেকে আলাদা একটি পৃথক শাখায় উন্নয়ন করা হয়। এটি একাধিক ডেভেলপারকে প্রকল্পের স্থিতিশীল সংস্করণের ক্ষতি করার ঝুঁকি ছাড়াই বিভিন্ন কাজে একসাথে কাজ করার অনুমতি দেয়। Atlassian, 2024-এর মতে, Feature Branch হল Git Flow-এর একটি মূল উপাদান এবং অধিকাংশ বাণিজ্যিক প্রকল্পে ব্যবহৃত হয়।
মূল পয়েন্ট
feature/ফাংশন-নাম।Feature Branch (বৈশিষ্ট্য শাখা) হল Git-এ একটি অস্থায়ী শাখা যা একটি নির্দিষ্ট কার্যকারিতা উন্নয়নের জন্য develop থেকে তৈরি করা হয়। দীর্ঘস্থায়ী main এবং develop শাখার বিপরীতে, feature শাখাগুলি সীমিত সময়ের জন্য — কয়েক ঘন্টা থেকে কয়েক সপ্তাহ পর্যন্ত — বিদ্যমান থাকে।
feature branch-এর মূল লক্ষ্য হল একটি কাজের সাথে সম্পর্কিত পরিবর্তনগুলিকে বাকি কোড থেকে আলাদা করা। ডেভেলপার তার নিজের শাখায় পরীক্ষা-নিরীক্ষা করতে পারে, অনেকগুলি commit করতে পারে এবং এমনকি কোড ভাঙতে পারে, দলের অন্যান্য সদস্যদের কাজকে প্রভাবিত না করে।
উন্নয়ন সম্পূর্ণ হওয়ার পর, feature branch-টি বাধ্যতামূলক কোড পর্যালোচনা সহ Pull Request-এর মাধ্যমে develop-এ ফিরে একীভূত করা হয়। একীভূত করার পর, রিপোজিটরি পরিষ্কার রাখতে শাখাটি সাধারণত মুছে ফেলা হয়।
Vincent Driessen, 2010-এর মতে, feature শাখার সাথে Git Flow মডেল বিভিন্ন ধরণের শাখার মধ্যে দায়িত্বের স্পষ্ট বিভাজনের কারণে শিল্পের মান হয়ে উঠেছে।
কর্মপ্রবাহ feature branch-এর সাথে সেই ধাপগুলির একটি ক্রম নিয়ে গঠিত যা ডেভেলপার প্রতিটি নতুন বৈশিষ্ট্যের জন্য সম্পাদন করে। এই প্রক্রিয়াটি একীভূতকরণের দ্বন্দ্ব কমিয়ে দেয় এবং কোডের গুণমান নিয়ন্ত্রণ নিশ্চিত করে।
develop-এর সাথে পর্যায়ক্রমিক সিঙ্ক্রোনাইজেশন অত্যন্ত গুরুত্বপূর্ণ। feature শাখা যত বেশি সময় develop থেকে পরিবর্তন একীভূত না করে বেঁচে থাকে, চূড়ান্ত একীভূতকরণে দ্বন্দ্বের সম্ভাবনা তত বেশি।
| সিঙ্ক্রোনাইজেশন ফ্রিকোয়েন্সি | দ্বন্দ্বের ঝুঁকি | উন্নয়নের সুবিধা |
|---|---|---|
| দৈনিক | কম | ঘন ঘন rebase বা merge প্রয়োজন |
| সাপ্তাহিক | মধ্যম | আরামদায়ক গতি, মধ্যম দ্বন্দ্ব |
| মাসিক | উচ্চ | জটিল একীভূতকরণ দ্বন্দ্ব সমাধানের ঝুঁকি |
| কখনই নয় | গুরুতর | ডেটা ক্ষতি ছাড়া একীভূতকরণ অসম্ভব হতে পারে |
শাখার নামকরণ দলের শৃঙ্খলার একটি গুরুত্বপূর্ণ অংশ। একটি অভিন্ন নামকরণের মান দ্রুত সনাক্ত করতে দেয় যে কোন কাজে কাজ চলছে এবং কে এটি করছে।
feature/added-auth-module।feature/PROJ-42-add-login।feature/feat/analytics-dashboard।JIRA, Trello বা অন্য সিস্টেম থেকে কাজের ID ব্যবহার করা একটি সেরা অনুশীলন। এটি স্বয়ংক্রিয়ভাবে কোডকে কাজের সাথে সংযুক্ত করে এবং git log-এর মাধ্যমে শাখা অনুসন্ধান সহজ করে।
Pull Request (বা GitLab-এ Merge Request) হল feature শাখাটিকে develop-এ একীভূত করার অনুরোধ। PR শুধুমাত্র একটি প্রযুক্তিগত অপারেশন নয়, বরং একটি দলগত কোড পর্যালোচনা প্রক্রিয়া যা কোডের গুণমান উন্নত করে এবং দলের মধ্যে জ্ঞান ছড়িয়ে দেয়।
একটি ভাল PR-এ কাজের সংক্ষিপ্ত বিবরণ সহ শিরোনাম, টিকিটের লিঙ্ক এবং পরিবর্তনের বিবরণ থাকে। ডেভেলপারের উচিত বলা কী কী করা হয়েছে, কোন ফাইলগুলি পরিবর্তন করা হয়েছে এবং প্রকল্পের অন্যান্য অংশের জন্য সম্ভাব্য ঝুঁকি আছে কিনা।
দল PR-এ কোড পর্যালোচনা করে, মন্তব্য রাখে, পরিবর্তনের অনুরোধ করে (change requests) এবং একীভূতকরণ অনুমোদন করে (approve)। অনুমোদনের পর, merge বা squash merge সম্পাদন করা হয়।
মোবাইল ডেভেলপমেন্টে PR পর্যালোচনার গড় সময় 4 থেকে 24 ঘন্টা। Danger লাইব্রেরি সরাসরি PR-এ linters এবং পরীক্ষা চালিয়ে কিছু পরীক্ষা স্বয়ংক্রিয় করে।
PR অনুমোদনের পর, feature শাখাটি বিভিন্ন উপায়ে develop-এ একীভূত করা যেতে পারে। একীভূতকরণ কৌশল পছন্দ commit ইতিহাস এবং পরিবর্তনগুলি ফিরিয়ে আনার ক্ষমতাকে প্রভাবিত করে।
ঘন ঘন রিলিজ সহ মোবাইল প্রকল্পগুলির জন্য, সাধারণত squash merge ব্যবহৃত হয়: এটি develop-এ একটি পরিষ্কার ইতিহাস দেয়, যখন উন্নয়নের বিশদ PR বিবরণ এবং tracker কাজে থাকে।
অভিজ্ঞ ডেভেলপাররাও feature শাখা নিয়ে কাজ করার সময় ভুল করে। সাধারণ সমস্যাগুলি জানা সময় এবং ডেটা ক্ষতি এড়াতে সহায়তা করে।
এই সমস্যাগুলি এড়ানোর সর্বোত্তম উপায় হল প্রকল্পের শুরুতে কাজের নিয়মগুলিতে সম্মত হওয়া এবং CI/CD পাইপলাইনে স্বয়ংক্রিয় পরীক্ষা ব্যবহার করা।
একটি বাস্তবিক দৃশ্যকল্প বিবেচনা করুন: একজন ডেভেলপার একটি মোবাইল অ্যাপে একটি নতুন প্রমাণীকরণ বৈশিষ্ট্য শুরু করে। তিনি একটি feature শাখা তৈরি করেন, কোড নিয়ে কাজ করেন এবং Pull Request-এর মাধ্যমে কাজটি সম্পূর্ণ করেন।
# develop আপডেট করুন এবং feature শাখা তৈরি করুন
git checkout develop
git pull origin develop
git checkout -b feature/add-login-screen
# বৈশিষ্ট্যে কাজ: commits
git add src/ui/login/
git commit -m "Add login screen layout"
# সার্ভারে feature শাখা push করুন
git push origin feature/add-login-screen
# develop-এর সাথে সিঙ্ক্রোনাইজ করুন (rebase)
git fetch origin develop
git rebase origin/develop
# PR অনুমোদনের পর: স্থানীয় develop আপডেট করুন এবং শাখা মুছুন
git checkout develop
git pull origin develop
git branch -d feature/add-login-screen
কমান্ড git branch -d শাখাটিকে কেবল তখনই মুছে ফেলে যখন এর পরিবর্তনগুলি সম্পূর্ণরূপে একীভূত হয়েছে। যদি শাখাটি একীভূত না হয়, Git জোর করে মুছে ফেলার জন্য git branch -D ব্যবহার করার পরামর্শ দেবে — এই ফ্ল্যাগটি সাবধানতার সাথে ব্যবহার করুন।
PR তৈরি করার আগে প্রতিটি feature শাখার জন্য CI/CD পাইপলাইন চালানো উচিত। এটি কোড অন্যান্য ডেভেলপারদের পর্যালোচনায় যাওয়ার আগে প্রাথমিক পর্যায়ে সমস্যা সনাক্ত করতে সহায়তা করে।
# feature শাখা পরীক্ষার জন্য GitHub Actions
name: Feature Branch CI
on:
push:
branches:
- 'feature/**'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run tests
run: ./gradlew test
- name: Lint check
run: ./gradlew lint
পাইপলাইন যাচাই করে যে কোড কম্পাইল হয়, পরীক্ষা পাস হয় এবং কোড শৈলী দলের মান পূরণ করে। সমস্ত পরীক্ষা পাস করার পরই একটি Pull Request তৈরি করা যেতে পারে।
সচরাচর জিজ্ঞাসিত প্রশ্ন
হ্যাঁ, এটি একটি মানক অনুশীলন। প্রতিটি ডেভেলপার তার নিজস্ব feature শাখায় কাজ করতে পারে, এবং সেগুলি সবই develop-এর সাথে স্বাধীনভাবে সিঙ্ক্রোনাইজ হয়। প্রধান নিয়ম — একটি কাজের জন্য একটি শাখা, কোডে cross-task নির্ভরতা এড়াতে।
আপনার feature শাখায় git rebase origin/develop চালান। যদি দ্বন্দ্ব দেখা দেয় — সেগুলি একে একে সমাধান করুন, commit-গুলি develop-এর সর্বশেষ অবস্থার উপরে পুনরায় লেখা হবে। Rebase-এর পরে, রিমোট শাখা আপডেট করতে git push --force প্রয়োজন হবে।
যদি কাজ বাতিল করা হয়, তাহলে feature শাখাটি সরাসরি মুছে ফেলা যেতে পারে। স্থানীয় শাখার জন্য git branch -d feature/name এবং রিমোটের জন্য git push origin --delete feature/name চালান। সমস্ত আনকমিটেড পরিবর্তন হারিয়ে যাবে।
মূলত এটি একই জিনিস। বিভিন্ন দল বিভিন্ন উপসর্গ ব্যবহার করে: feature/, task/, feat/। Git মেকানিক্সে কোনো পার্থক্য নেই — এগুলি সবই পৃথক উন্নয়নের জন্য develop থেকে তৈরি অস্থায়ী শাখা।
হ্যাঁ, এটি একটি বাধ্যতামূলক অনুশীলন। একীভূত করার পরে শাখাগুলি রেফারেন্সের তালিকা জঞ্জাল করে এবং বিভ্রান্তির কারণ হতে পারে। বেশিরভাগ প্ল্যাটফর্ম (GitHub, GitLab) PR একীভূত করার সাথে সাথেই শাখা মুছে ফেলার প্রস্তাব দেয়, এবং স্থানীয় শাখাগুলি git branch -d কমান্ড দিয়ে মুছে ফেলা হয়।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন