গিটে, মুছে ফেলা শাখা হিসাবে একই নামের সাথে একটি ট্যাগ তৈরি করা কি খারাপ ধারণা?


20

আমি একটি Git শাখাবিন্যাস মডেল মোটামুটিভাবে যে অনুসরণ করে যে সঙ্গে একটি প্রকল্প আছে nvie এর Git-প্রবাহ

আমাদের প্রকাশের শাখাগুলি একটি সেমভিয়ার ফর্ম্যাটে নামকরণ করা হয়েছে , যেমনv1.5.2

একবার মুক্তির শাখাকে উত্পাদনের জন্য সবুজ আলো দেওয়া হয়ে গেলে, আমরা শাখাটি বন্ধ করে, এটি মাস্টারে মার্জ করে, ট্যাগ প্রয়োগ করে, এবং তারপরে শাখাটি মোছা করে।

আমরা অবিলম্বে রিলিজ শাখাটি মোছার সাথে সাথে আমরা শাখাটিকে ট্যাগ করার জন্য একই সনাক্তকারী ব্যবহার করেছি, উদাহরণস্বরূপ v1.5.2

রিলিজ শাখা বন্ধ করতে আমরা যে কমান্ডগুলি ব্যবহার করব তা এখানে:

$ git checkout master
$ git merge v1.5.2
$ git tag -a v1.5.2 -m "Version 1.5.2 - foo bar, baz, etc"
$ git branch -d v1.5.2
$ git branch -dr origin/v1.5.2
$ git push origin :v1.5.2
$ git push
$ git push --tags

এটি বেশিরভাগ ক্ষেত্রে কাজ করে বলে মনে হচ্ছে, তবে এটি দৃশ্যে কোনও সমস্যা সৃষ্টি করছে যেখানে গিট রেপোর অন্য একটি উদাহরণ (যেমন অন্য কোনও দেব মেশিন, বা মঞ্চ পরিবেশ) v1.5.2 শাখার স্থানীয় চেকআউট রয়েছে।

git push origin :v1.5.2কমান্ডের সাহায্যে দূরবর্তী শাখা মুছে ফেলবে, কিন্তু স্থানীয় (যদি থাকে তাহলে) সমস্ত Repos মধ্যে শাখা সংস্করণ মুছে ফেলবে না।

এই v1.5.2রেপোগুলিতে চেকআউট দেওয়ার সময় এটি একটি দ্ব্যর্থক রেফারেন্সের দিকে নিয়ে যায় :

$ git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.

শাখাগুলির জন্য আলাদা সিনট্যাক্স ব্যবহার না করে এড়ানো যেতে পারে, উদাহরণস্বরূপ release-v1.5.2, বা v1.5.2-rc?

বা এটি অনিবার্য, এবং তাই মুছে ফেলা শাখা হিসাবে একই নামে একটি ট্যাগ তৈরি করার জন্য মৌলিকভাবে খারাপ ধারণা?

উত্তর:


19

আপনি যদি এই নামকরণের স্কিমটি পুরোপুরি রাখতে চান তবে আপনি:

সিদ্ধান্ত নিন যে আপনি এই সতর্কতাগুলির বিষয়ে চিন্তা করেন না

এটি হ'ল আপনি যদি এই সত্যটি নিয়ে খুশি হন তবে:

উদাহরণস্বরূপ, এই পরীক্ষার ভাণ্ডারে v1.5.2শাখাটি বি প্রতিশ্রুতি দেয়, কিন্তু v1.5.2ট্যাগটি অঙ্গীকার করে

% git log --oneline --decorate
8060f6f (HEAD, v1.5.2, master) commit B
0e69483 (tag: v1.5.2) commit A

git checkout শাখার নাম পছন্দ করে:

% git checkout v1.5.2
warning: refname 'v1.5.2' is ambiguous.
Switched to branch 'v1.5.2'
% git log --decorate --oneline -1
8060f6f (HEAD, v1.5.2, master) commit B

তবে git logট্যাগের নামটি ব্যবহার করবে:

% git log --decorate --oneline -1 v1.5.2
warning: refname 'v1.5.2' is ambiguous.
0e69483 (tag: v1.5.2) commit A

এটি বিভ্রান্তিকর হতে পারে।

লোকেরা যখন একটি নতুন ট্যাগ দেখেন তখন তাদের স্থানীয় শাখাগুলি মুছতে প্রশিক্ষণ দিন

এটি আপনার সংস্থার আকারের উপর নির্ভর করে শক্ত / বিশ্রী হতে পারে।

"গিট টান" এবং "গিট আনতে" চারপাশে একটি মোড়ক লিখুন

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

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


উত্তরের জন্য ধন্যবাদ. খুব উপকারী. আপনার প্রথম git checkoutবুলেটটিতে বলা হয়েছে যে যখন কোনও দ্বিপাক্ষিক উল্লেখ আছে তখন শাখার উপরের ট্যাগটি পরীক্ষা করে দেখবে, তবে এটি আমি যে আচরণটি দেখছি তা নয়, রেফ: gist.github.com/tommarshall/9376724 । এটি কি এমন কিছু যা গিটের আরও আধুনিক সংস্করণে পরিবর্তিত হয়েছে? gitconfigএই আচরণটি পেতে আমি কি কোনও পতাকা সেট করতে পারি ?
টমমশাল

আপনি ঠিক বলেছেন, আমি এটি পুরোপুরি ভুল পেয়েছি। দুঃখিত! আমি আমার উত্তর স্থির করেছি এবং একটি উদাহরণ যুক্ত করেছি।
বেঞ্জ

10

পুরো নাম ব্যবহার করে আপনি কোনও শাখা বা ট্যাগ চান কিনা তা আপনি স্পষ্টভাবে উল্লেখ করতে পারেন:

 git checkout refs/heads/v1.5.2

অথবা

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