আপনার গিটার-প্রবাহের দিকে নজর দেওয়া উচিত । এটি একটি দুর্দান্ত (এবং জনপ্রিয়) শাখার মডেল
গিট ফ্লো সংক্ষিপ্তসার
শাখাবিন্যাস
মূল ট্রাঙ্কগুলি যে চিরকালই থাকে develop
এবং সেগুলি হয় master
। master
আপনার সর্বশেষ প্রকাশটি develop
ধরে রাখে এবং আপনার সর্বশেষ "স্থিতিশীল" বিকাশের অনুলিপি রাখে।
অবদানকারীরা এর feature
শাখা তৈরি করে ( feature/
কনভেনশন দ্বারা উপসর্গযুক্ত) এর বাইরে develop
:
$ git checkout -b feature/my-feature develop
এবং hotfix
শাখা ( hotfix/
অধিবেশন দ্বারা উপসর্গযুক্ত) বন্ধ master
:
# hotfix the latest version of master
$ git checkout -b hotfix/hotfix-version-number master
# or hotfix from a specific version
$ git checkout -b hotfix/hotfix-version-number <starting-tag-name>
এই শাখাগুলি "ডিসপোজেবল", যার অর্থ মূল ট্রাঙ্কগুলিতে ফিরে মার্জ হওয়ার আগে তাদের একটি দীর্ঘ জীবনকাল থাকে। তারা কার্যকারিতা ছোট টুকরা encapsulate বোঝানো হয়।
শাখা সমাপ্তি
যখন কোনও योगदान feature
কারী একটি শাখার সাথে সম্পন্ন হয় , তারা এটিকে আবার এতে মিশ্রিত করে develop
:
$ git checkout develop
$ git merge --no-ff feature/my-feature
$ git branch -d feature/my-feature
যখন সেগুলি একটি hotfix
শাখার সাথে সম্পন্ন হয় , তারা এটিকে আবার উভয়তে একীভূত করে master
এবং develop
তাই হটফিক্স এগিয়ে চলে:
$ git checkout master
$ git merge --no-ff hotfix/hotfix-version-number
$ git checkout develop
$ git merge --no-ff hotfix/hotfix-version-number
$ git branch -d hotfix/hotfix-version-number
এটি অবিচ্ছিন্ন একীকরণের দিক।
রিলিজ
আপনি যখন রিলিজের প্যাকেজিং শুরু করতে প্রস্তুত হন, আপনি release
আপনার "স্থিতিশীল" develop
শাখা (শাখা তৈরির মতো feature
) থেকে একটি শাখা তৈরি করেন । তারপরে আপনি কোনও ট্যাগে সংস্করণ নম্বরটি ফাটিয়ে ফেলুন (নীচে বর্ণিত)।
পৃথক release
শাখা ব্যবহার করে develop
আপনি বাগ ঠিক করার সময় এবং release
শাখায় সমাপ্তি স্পর্শ যুক্ত করার সময় নতুন বৈশিষ্ট্য বিকাশ চালিয়ে যেতে পারবেন ।
আপনি যখন রিলিজটি শেষ করতে প্রস্তুত হবেন, আপনি release
শাখাটিকে উভয় master
এবং develop
(যেমন একটি hotfix
) তে একত্রীকরণ করুন যাতে আপনার সমস্ত পরিবর্তন এগিয়ে যায়।
ট্যাগিং
আপনি যখন একটি release
শাখা বা একটি hotfix
শাখা তৈরি করেন , আপনি ভার্সন নম্বরটি কোনও ট্যাগে যথাযথভাবে কাটাবেন। ভ্যানিলা গিট সহ, এটি দেখতে এরকম দেখাচ্ছে:
$ git tag -a <tag-name> -m <tag-description>
এর পরে আপনাকে ট্যাগগুলি (আলাদাভাবে) আপনার দূরবর্তী সংগ্রহস্থলে চাপতে হবে:
$ git push --tags
আপনার সংস্করণগুলি ফর্মটি ধারণ করে সেসমেন্টিক সংস্করণটি ব্যবহার করা সাধারণত সেরা major.minor.hotfix
। মেজর বাম্পগুলি পিছনের দিকে অসম্পূর্ণ, যেখানে ছোট এবং হটফিক্সের ফোঁড়াগুলি পিছনের দিক থেকে বেমানান নয় (যদি আপনি বিটাতে না থাকেন 0.x.x
)।
মার্জ
যেমন আপনি উপরে দেখেছেন, গিট-ফ্লো আপনাকে নীচের কমান্ডের সাথে শাখাগুলি মার্জ করতে উত্সাহিত করে:
$ git merge --no-ff <branch-name>
--no-ff
বিকল্পটি বর্তমান প্রায় মিথ্যা শাখা একটি গুচ্ছ গিয়েই আপনার শাখা ইতিহাস বজায় রাখার জন্য সংগ্রহস্থলের (তাই কোন উদ্বেগ, আপনি প্রতি সংস্করণ জন্য একটি শাখা থাকবে না) এর কমিট পারেন।
আপনি সাথে টানতে উত্সাহিত হয়
$ git pull --rebase
সুতরাং আপনি প্রচুর অকেজো মার্জ কমিট যোগ করবেন না।
আপনি নিজের মধ্যে ডিফল্টভাবে এই দুটি জিনিস করতে গিটটি কনফিগার করতে পারেন .gitconfig
। আমি আপনাকে এটি দেখতে চাই যদিও;)
ব্রাউজিং সংস্করণ
যখন কেউ আপনার কোডবেসের একটি নির্দিষ্ট সংস্করণ সন্ধান করছেন, তারা নাম অনুসারে ট্যাগটি চেকআউট করতে পারেন:
# checkout in detached HEAD to browse
$ git checkout <tag-name>
# OR checkout and create a new local branch (as you might for a hotfix)
$ git checkout -b <new-branch-name> <tag-name>
বা, যদি কেউ গিথুবটিতে ব্রাউজ করছেন তবে "শাখা" ড্রপডাউনটিতে একটি "ট্যাগ" ট্যাবও রয়েছে।
গিট-ফ্লো এক্সটেনশন ব্যবহার করা (প্রস্তাবিত)
এই মডেলটি ব্যবহার করার জন্য আমার প্রিয় উপায়টি হ'ল গিটের জন্য গিট ফ্লো এক্সটেনশন ।
( সম্পাদনা করুন: লুই এভিএইচ কাঁটাচামচ সুপারিশ করেছেন যা এর সাথে git describe
আরও ভাল কাজ করে এবং এখন আরও সক্রিয় হতে পারে। ধন্যবাদ লুই।)
এক্সটেনশনটি সমস্ত অগোছালো অংশগুলিকে স্বয়ংক্রিয় করে তোলে (যেমন merge --no-ff
মার্জ করার পরে শাখা ব্যবহার এবং মোছা) যাতে আপনি আপনার জীবন নিয়ে যেতে পারেন।
উদাহরণস্বরূপ, এক্সটেনশনের সাহায্যে আপনি এর মতো একটি বৈশিষ্ট্য শাখা তৈরি করতে পারেন:
$ git flow feature start my-feature-name
এবং এটি যেমন শেষ
$ git flow feature finish my-feature-name
হটফিক্স এবং রিলিজের জন্য আদেশগুলি অনুরূপ, যদিও তারা শাখার নামের জায়গায় সংস্করণ নম্বর ব্যবহার করে, যেমন:
# Create hotfix number 14 for this minor version.
$ git flow hotfix start 2.4.14
# Create the next release
$ git flow release start 2.5.0
গিট ফ্লো তারপরে আপনার জন্য সংস্করণ ট্যাগ তৈরি করে এবং দয়া করে যেকোন কনফিগারেশন বা ম্যানিফেস্ট ফাইলগুলিতে (যা আপনি গ্রান্টের মতো কোনও টাস্ক ম্যানেজারের সাথে করতে পারেন) সংস্করণটি ফাটিয়ে দেওয়ার জন্য মনে করিয়ে দেয়।
আশা করি এটি সাহায্য করে :) আমি নিশ্চিত না যে আপনি কীভাবে আপনার ট্র্যাভিস সিআই সেটআপের সাথে এটি সমস্ত সংহত করেছিলেন, তবে আমি অনুমান করছি যে গিথুকগুলি আপনাকে সেখানে পেয়ে যাবে।