সংস্করণ পরিচালনার জন্য গিথুব, শাখা এবং স্বয়ংক্রিয় প্রকাশগুলি কীভাবে ব্যবহার করবেন? [বন্ধ]


24

আমি এখনই বেশিরভাগ বেসিক গিট / গিথুব ধারণাগুলি বুঝতে পেরেছি, তবে বড় ছবিটি বুঝতে এখনও আমার সমস্যা হচ্ছে।

এগুলি এমন কিছু জিনিস যা আমি এখনও পর্যন্ত কাজ করতে সক্ষম হয়েছি:

  • পুশ কমিট করে
  • শাখা সঙ্গে কাজ
  • ট্র্যাভিস সিআই, একটি অবিচ্ছিন্ন ইন্টিগ্রেশন সিস্টেমের সাথে গিথুবকে সংহত করুন
  • ট্র্যাভিস সিআইয়ের মাধ্যমে, স্বয়ংক্রিয়ভাবে প্রতিশ্রুতিবদ্ধ প্রতিটি প্রতিশ্রুতি তৈরি করুন এবং রিলিজগুলি গিথুবকে জিপ হিসাবে প্রকাশের অধীনে রাখুন।

তবে আমি এখন পর্যন্ত কেবলমাত্র প্রকল্পগুলির আলফা / বিটা সংস্করণে কাজ করেছি, তাই আমি এখনও বাস্তবে রূপান্তরিত রিলিজ দেখিনি।

সুতরাং আমি সংস্করণকরণ, পৃথক সংস্করণ বজায় রাখা, সংস্করণগুলির হটফিক্সিং ইত্যাদি সম্পর্কে আরও জানতে চাই

নিম্নলিখিত জিনিসগুলি কীভাবে ঘটবে তা আমি কীভাবে নিশ্চিত করব:

  • আমার প্রকল্পের বিভিন্ন সংস্করণ রয়েছে, উদাহরণস্বরূপ সংস্করণ 1.1.0 এবং 2.0.0
  • সংস্করণগুলিতে হটফিক্সগুলি ধাক্কা দেওয়ার ক্ষমতা রাখুন, সংস্করণটিকে 1.1.1 বা 2.0.1 এ বাম্পিং করুন ইত্যাদি Have
  • একটি অবিচ্ছিন্ন ইন্টিগ্রেশন সিস্টেম কমিটে স্বয়ংক্রিয়ভাবে সেই সংস্করণটি তৈরি করুন এবং যদি সফল হয়, তবে সেই নির্দিষ্ট সংস্করণের জন্য একটি প্রকাশ প্রকাশ করুন।

আমি নিম্নলিখিত বিকল্পগুলির মধ্যে সন্দেহ করছি:

  • আমার কি প্রতিটি সংস্করণের জন্য ট্যাগ ব্যবহার করা দরকার? যদি তা হয় তবে কীভাবে একটি অবিচ্ছিন্ন ইন্টিগ্রেশন সিস্টেম স্বয়ংক্রিয়ভাবে প্রকাশনা তৈরি করতে পারে?
  • আমি কি প্রতিটি সংস্করণের জন্য শাখা তৈরি করব? যদি তা হয়, তবে কি এটি পুরো টন শাখা তৈরি করবে না (যেমন ১.১ এবং ২.০ শাখা, হটফিক্সগুলি অবশ্যই সেই শাখায় যায়)
  • আমি কীভাবে সংস্করণ নম্বরটি নির্দিষ্ট করব? সংস্করণ নম্বরটি নির্দিষ্ট করে এমন কনফিগারেশন ফাইল থাকা কি ঠিক আছে, বা এর চারপাশে আরও চৌকস উপায় রয়েছে? এই ক্ষেত্রে এটি জাভা প্রকল্প হতে পারে, যদি এটি বিবেচনা করে।

3
যেমনটি দাঁড়িয়েছে, গিটের সম্পূর্ণতার উপরে এটি একটি বিস্তৃত প্রশ্ন। একটি আছে সংখ্যা এর প্রশ্ন এই বিষয়ে আপনি ব্রাউজ করতে চান করতে পারে যে এর সাথে সম্পর্কিত। সম্ভবত এগুলির কয়েকটি পড়ুন এবং এটিকে সংকুচিত করুন বা এটিকে বিভক্ত করুন যাতে এটি কোনও বই না লিখে উত্তর দেওয়া যায়।
21

বিষয়বস্তু প্রতিফলিত করতে শিরোনামটি কিছুটা বাদ দিয়ে দিলেন।
মাইকেল ডুরান্ট


1
আমি এটি উল্লেখ করব যে যখন আমি অনেকগুলি এবং আরও অনেক কিছু খুঁজে পেয়েছি (আমি বাইরে বেরিয়ে এসেছি) তখন এই প্রশ্নের মধ্যে থাকা পৃথক প্রশ্নের সম্ভাব্য নকলগুলি আমি বিশ্বাস করি সামগ্রিক প্রশ্নটি 'খুব বিস্তৃত' দিকের কিছুটা।

"আপনার প্রশ্নগুলি যুক্তিসঙ্গতভাবে বাদ দেওয়া উচিত ..." ( সহায়তা কেন্দ্র )। দেখুন meta.programmers.stackexchange.com/questions/6483/...
মশা

উত্তর:


42

আপনার গিটার-প্রবাহের দিকে নজর দেওয়া উচিত । এটি একটি দুর্দান্ত (এবং জনপ্রিয়) শাখার মডেল

গিট ফ্লো সংক্ষিপ্তসার

শাখাবিন্যাস

মূল ট্রাঙ্কগুলি যে চিরকালই থাকে developএবং সেগুলি হয় mastermasterআপনার সর্বশেষ প্রকাশটি 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

গিট ফ্লো তারপরে আপনার জন্য সংস্করণ ট্যাগ তৈরি করে এবং দয়া করে যেকোন কনফিগারেশন বা ম্যানিফেস্ট ফাইলগুলিতে (যা আপনি গ্রান্টের মতো কোনও টাস্ক ম্যানেজারের সাথে করতে পারেন) সংস্করণটি ফাটিয়ে দেওয়ার জন্য মনে করিয়ে দেয়।


আশা করি এটি সাহায্য করে :) আমি নিশ্চিত না যে আপনি কীভাবে আপনার ট্র্যাভিস সিআই সেটআপের সাথে এটি সমস্ত সংহত করেছিলেন, তবে আমি অনুমান করছি যে গিথুকগুলি আপনাকে সেখানে পেয়ে যাবে।


রিলিজ শাখা শুরু করার সময়, আপনি কি প্রতিটি রিলিজের শাখার নাম হিসাবে একই আক্ষরিক স্ট্রিং 'রিলিজ' বা 'v0.3.0' এর মতো নির্দিষ্ট সংস্করণ ব্যবহার করেন? এই নির্দেশাবলী দুর্দান্ত এবং আমি তাদের চিঠিটি অনুসরণ করার চেষ্টা করব, তবে আমি এটির এই দিকটি বিশৃঙ্খলা করতে চাই না।
পল

1
প্লাগ-ইন কমান্ড Git প্রবাহ ব্যবহার করে, আপনি, সংস্করণ আইডেন্টিফায়ার করা হবে মত v0.3.0, জন্য <release> git flow release start <release> [<base>]। হুডের নীচে, এটি সংস্করণ সহ একটি শাখার নাম তৈরি করবে, যেমন release/v0.3.0
এমএক্সডুবুইস

3

আমার কি প্রতিটি সংস্করণের জন্য ট্যাগ ব্যবহার করা দরকার?

না, আপনাকে কোনও ট্যাগ ব্যবহার করার দরকার নেই । আপনি যদি প্রতিটি প্রকাশকে ট্যাগ করতে চান, এটি ঠিক আছে, বা আপনি যদি প্রতিটি সিআই সিস্টেম তৈরি করেন প্রতিবার ট্যাগ করতে চান, আপনি এটিও করতে পারেন। ট্যাগগুলি মূলত প্রতিশ্রুতিবদ্ধভাবে একটি ব্যবহারকারী বান্ধব নাম দিচ্ছে, যাতে আপনি সহজেই এটিকে টানতে এবং পরে এটি দেখতে পারেন।

আমি কি প্রতিটি সংস্করণের জন্য শাখা তৈরি করব?

নিশ্চিত! গিটে ব্রাঞ্চিং সস্তা / নিখরচায়, তাই আমি যতবারই সুযোগ পাই তার সদ্ব্যবহার করি। আপনি মোটামুটি দ্রুত শাখাগুলিতে মার্জ এবং মুছতে পারেন। আপনি যদি মনে করেন যে আপনার অনেক শাখায় রয়েছে তবে আপনি সর্বদা কিছু নির্বাচিত মার্জ করে পরে এগুলি প্যার করতে পারেন। আপনি যদি চেষ্টা করা এবং সত্যিকারের স্কিম ব্যবহার করতে চান তবে বেশ কয়েকটি গিট ব্রাঞ্চিং পরিকল্পনা রয়েছে।

আমি কীভাবে সংস্করণ নম্বরটি নির্দিষ্ট করব?

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


3

আমার কি প্রতিটি সংস্করণের জন্য ট্যাগ ব্যবহার করা দরকার?

যদি "সংস্করণ" দ্বারা আপনি বোঝাতে চান এমন ফাইলগুলির একটি সেট যা একটি রিলিজ বা প্রকাশের প্রার্থী করে, তবে আমি প্রতিটি সংস্করণটি ট্যাগ করার জন্য দৃ strongly়ভাবে প্রস্তাব দিই। যদি আপনাকে রাস্তার নিচে 1.2.7 সংস্করণটি উল্লেখ করতে হয়, আপনি কি কোনও প্রতিশ্রুতিবদ্ধ হ্যাশ খোঁজ করতে চান বা কেবল সংস্করণ নম্বরটি ব্যবহার করতে চান?

এছাড়াও যদি আপনি git describeকোথাও বিল্ড তথ্য রেকর্ড করতে ব্যবহার করেন (যেমন আমি করি), তবে ট্যাগ ব্যবহারের ফলে এটি আরও ভাল আউটপুট সরবরাহ করতে দেয়।

যদি তা হয় তবে কীভাবে একটি অবিচ্ছিন্ন ইন্টিগ্রেশন সিস্টেম স্বয়ংক্রিয়ভাবে প্রকাশনা তৈরি করতে পারে?

আপনি কীভাবে ট্যাগ ব্যবহার করেন না কেন একটি অবিচ্ছিন্ন ইন্টিগ্রেশন সিস্টেম রিলিজ তৈরি করতে পারে। আপনি এটি কমিটের হ্যাশের ভিত্তিতে একটি রিলিজ তৈরি করতে বলতে পারেন। ট্যাগগুলি আপনার জীবনকে সহজ করে তোলে।

আমি কি প্রতিটি সংস্করণের জন্য শাখা তৈরি করব? যদি তা হয়, তবে কি এটি পুরো টন শাখা তৈরি করবে না (যেমন ১.১ এবং ২.০ শাখা, হটফিক্সগুলি অবশ্যই সেই শাখায় যায়)

আমি শাখা প্রশাখাকে "প্রতি-সংস্করণ" জিনিস হিসাবে দেখছি না। আমার বেশ কয়েকটি প্রকল্প রয়েছে যেখানে আমার সংস্করণগুলি সমস্ত masterশাখায় কমিট করে comm এই মুহূর্তে এর চেয়ে বেশি জটিল আমার আর দরকার নেই কারণ কোনও প্রকল্পই স্থিতিশীল পর্যায়ে নেই এবং দীর্ঘমেয়াদী সংস্করণগুলিকে সমর্থন করার প্রয়োজন নেই। তবে আমি বলি যে আমি ১.০, ১.১, ১.২ প্রকাশ করি, তারপরে আমি ২.০ প্রকাশ করি এবং সুরক্ষা ফিক্স ইত্যাদির সাথে আমার এখনও 1.0 সিরিজটি সমর্থন করতে হবে তবে আমি অবশ্যই 1.x সিরিজের জন্য রক্ষণাবেক্ষণ রিলিজ দেওয়ার জন্য একটি শাখা করব ।

আমি কীভাবে সংস্করণ নম্বরটি নির্দিষ্ট করব? সংস্করণ নম্বরটি নির্দিষ্ট করে এমন কনফিগারেশন ফাইল থাকা কি ঠিক আছে, বা এর চারপাশে আরও চৌকস উপায় রয়েছে? এই ক্ষেত্রে এটি জাভা প্রকল্প হতে পারে, যদি এটি বিবেচনা করে।

কনফিগারেশন ফাইলের মতো আপনার সংস্করণ সংখ্যার একক উত্স থাকা সবচেয়ে ভাল উপায় কারণ এটি ফ্যাট আঙুলের ত্রুটিগুলি প্রতিরোধ করে যা অন্যথায় ঘটতে পারে যদি আপনাকে বেশ কয়েকটি জায়গায় সংখ্যার আপডেট করতে হয়। আমি ... হুম ... বিব্রতকর অভিজ্ঞতা থেকে বলছি। আপনি কেবল এই সফ্টওয়্যারটি রিপোর্ট করেছেন যে এটি 1.2 সংস্করণ 1.2 বলে জানায় কেবলমাত্র 1.3 প্রকাশ করে। ওহো!

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


0

আপনার তালিকাটি স্ক্যান করা আমি সংস্করণটিকে আপনার ফোকাস হিসাবে দেখছি , তাই ...

সংস্করণগুলি বজায় রাখার একটি উপায় শাখা এবং মার্জিং (বা রিবেসিং) সহ।

সুতরাং তোমার আছে:

master

তাহলে আপনি একটি শাখা তৈরি করুন

v1

তারপরে আপনি আরও পরিবর্তন যুক্ত করুন

master(diff1)

তাহলে আপনি একটি শাখা তৈরি করুন

v3

তারপরে আপনি আরও পরিবর্তন যুক্ত করুন

master(diff2)

এখন:

সংস্করণ 2 আপডেট করার জন্য আপনি এখনই করেন

git checkout v2
git merge master  # for the changes you want to bring into version 2
# rebasing is also an option
# resolve any merge conflicts
# Done.

সংস্করণ 3 আপডেট করতে

git checkout v3
git merge master

উপরেরটি পাইকারি আপডেটের জন্য।

সম্ভবত এটি সম্ভবত আরও সম্ভবত আপনি সুনির্দিষ্ট পরিবর্তনগুলি বেছে নিতে চাইবেন

git cherry-pick

Http://git-scm.com/docs/git-cherry-pick এ চেরি বাছাইয়ের বিষয়ে আরও

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.