মার্চুরিয়ালে কোনও বৈশিষ্ট্য শাখা সঠিকভাবে কীভাবে বন্ধ করবেন?


240

আমি একটি বৈশিষ্ট্য শাখায় কাজ শেষ করেছি feature-x। ফলাফলগুলি আবার defaultশাখায় মার্জ করতে এবং বন্ধ করে দিতে feature-xচাই যাতে এটির আউটপুট থেকে মুক্তি পাওয়া যায় hg branches

আমি নিম্নলিখিত পরিস্থিতিতে নিয়ে এসেছি, তবে এর কিছু সমস্যা রয়েছে:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge
$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch

সুতরাং feature-xশাখা (পরিবর্তন 40- 41) বন্ধ করা আছে, তবে একটি নতুন মাথা রয়েছে , সমাপনী শাখা পরিবর্তন 44, যা hg headsপ্রতিবারে তালিকাভুক্ত হবে :

$ hg log ...
o  44 Closed branch feature-x
|
| @  43 merge
|/|
| o  42 Changeset C
| |
o |  41 Changeset 2
| |
o |  40 Changeset 1
|/
o  39 Changeset B
|
o  38 Changeset A
|

আপডেট : এটি প্রদর্শিত হয় যেহেতু সংস্করণ 1.5 মার্চুয়ালটি hg headsআর আউটপুটে বন্ধ শাখাগুলির প্রধান দেখায় না।

আরও একটি মাথা না রেখে কি কোনও মার্জড শাখা বন্ধ করা সম্ভব? কোনও বৈশিষ্ট্য শাখা বন্ধ করার আরও সঠিক উপায় আছে কি?

সম্পর্কিত প্রশ্নগুলি:


@ অ্যান্ড্রে: তবে নিবন্ধটি নির্দেশ করে নিবন্ধটি কেবল "- ক্লোজ-ব্রাঞ্চ" সম্পর্কে আলোচনা করে না। এটি আপনার শাখা ছাঁটাই করার চারটি উপায় দেখায় । আপনি যদি সত্যিই এটি আর না চান তবে নিবন্ধে বর্ণিত হিসাবে আপনি ক্লোন করতে পারেন। একমাত্র 'সমস্যা' হ'ল যদি আপনি যেকোন কারণে এটি বন্ধ করতে চান তবে তবুও এটি রাখুন।
SyntaxT3rr0r

1
@ উইজার্ডঅফডস হ্যাঁ, আমি মৃত শাখাগুলি ছাঁটাই করার পুরো নিবন্ধটি পড়েছি। আমি শাখাটি পুনর্বিবেচনার ইতিহাসে থাকতে চাই, এটি ফেলে দেওয়া উচিত নয়। পূর্বে আমি বৈশিষ্ট্য শাখাগুলি defaultতাদের "বন্ধ" না করে কেবল মার্জ করে দিয়েছি । এর ফলে 0 টি নতুন মাথা তৈরি হয়েছিল তবে এ জাতীয় শাখা hg branchesচিরকালের জন্য দৃশ্যমান ছিল (নিষ্ক্রিয় শাখা হিসাবে)।
আন্দ্রে ভ্লাসভস্কিখ

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

উত্তর:


218

একটি উপায় হ'ল মার্জ করা বৈশিষ্ট্যগুলি শাখাগুলি কেবল খোলা (এবং নিষ্ক্রিয়) রেখে দেওয়া:

$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
feature-x  41:...
    (2 branches)

$ hg branches -a
default    43:...
    (1 branch)

আরেকটি উপায় হ'ল অতিরিক্ত প্রতিশ্রুতি ব্যবহার করে মার্জ করার আগে একটি বৈশিষ্ট্য শাখা বন্ধ করে দেওয়া:

$ hg up feature-x
$ hg ci -m 'Closed branch feature-x' --close-branch
$ hg up default
$ hg merge feature-x
$ hg ci -m merge

$ hg heads
    (1 head)

$ hg branches
default    43:...
    (1 branch)

প্রথমটি সহজ, তবে এটি একটি খোলা শাখা ছেড়ে দেয়। দ্বিতীয়টি কোনও মুক্ত মাথা / শাখা ছাড়েনি, তবে এর জন্য আরও একটি সহায়ক অঙ্গীকার প্রয়োজন। এই অতিরিক্ত ব্যবহারের মাধ্যমে ফিচার শাখায় শেষ আসল প্রতিশ্রুতি একত্রিত করা যেতে পারে --close-branchতবে কোনটি কমিটই শেষ হবে তা আগেই জানা উচিত।

আপডেট : Mercurial 1.5 যেহেতু আপনি যে কোন সময়ে শাখা বন্ধ করে দিতে পারেন, তাই এটি উভয় উপস্থিত হবে না hg branchesএবং hg headsআর। কেবলমাত্র যেটি সম্ভবত আপনাকে বিরক্ত করতে পারে তা হ'ল প্রযুক্তিগতভাবে সংশোধন গ্রাফটিতে সন্তানের ছাড়াই এখনও আরও একটি সংশোধন থাকবে।

আপডেট 2 : যেহেতু মার্চুরিয়াল 1.8 বুকমার্কগুলি মার্চুরিয়ালের মূল বৈশিষ্ট্য হয়ে উঠেছে। বুকমার্কগুলি নামকরণ করা শাখাগুলির চেয়ে শাখাগুলির পক্ষে আরও সুবিধাজনক। এই প্রশ্নটি দেখুন:


2
এটি অগত্যা সত্য নয় Bookmarks are more convenient for branching than named branches। এইচজি বুকমার্কগুলি গিট শাখার মতো জিনিস নয়। এগুলি অনেকগুলি প্রান্তের ক্ষেত্রে পূর্ণ যা এগুলি বৈশিষ্ট্য শাখা হিসাবে অনুপযুক্ত করে তোলে। উদাহরণস্বরূপ: আপনি যখন কোনও সংগ্রহশালা ক্লোন করবেন তখন আপনি defaultশাখায় সর্বশেষ প্রতিশ্রুতি দিয়ে শেষ করবেন । আপনি যদি বুকমার্ক ব্যবহার করেন তবে এই পরিবর্তনটি একটি এলোমেলো (অস্থির) বুকমার্কের সাথে মিলে যায়। আপনি যদি নামযুক্ত শাখা ব্যবহার করেন তবে আপনি স্থিতিশীল / ডিফল্ট শাখায় সর্বশেষ প্রতিশ্রুতি পাবেন যা সাধারণত আপনি চান usually বুকমার্কগুলি একদিন সেখানে পাবেন, তবে তারা এখনও সেখানে নেই।
গিলি

আমি বুকমার্কগুলিকে ব্যক্তিগত ট্যাগ হিসাবে ব্যবহার করি যা কেবলমাত্র আমার স্থানীয় সংগ্রহস্থলে দৃশ্যমান। আমার কাছে আবার ঘুরতে হবে এমন চেঞ্জসেটগুলির অনুস্মারক হিসাবে তারা কাজ করে।
গিলি

আমি এই পদ্ধতির অনুসরণ করতে চেষ্টা করেছি, কিন্তু আমি এখনও একটি ত্রুটি ধাক্কা বের করার চেষ্টা পাবেন: abort: push creates new remote branches:। আমি কী ভুল করতে পারি?
কাস্পারড

79

imho শাখাগুলির জন্য দুটি ক্ষেত্রে রয়েছে যা বন্ধ করতে ভুলে গিয়েছিল

কেস 1: শাখাটি ডিফল্টে একীভূত হয়নি

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

hg up myBranch
hg commit --close-branch

কেস 2: শাখাটি ডিফল্টে একীভূত হয়েছিল

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

এক্ষেত্রে আমি শাখার চেঞ্জসেটে আপডেট করি, - ক্লোজ-ব্রাঞ্চের সাথে আরও একটি কমিট করি এবং নতুন চেঞ্জসেটটি ডিফল্টে রূপান্তরিত করে। শেষ ক্রিয়াকলাপটি একটি নতুন টিপ তৈরি করে যা ডিফল্ট শাখায় রয়েছে - হোরে!

hg up myBranch
hg commit --close-branch
hg up default
hg merge myBranch

আশা করি এটি ভবিষ্যতের পাঠকদের সহায়তা করবে।


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

8
@ এমবি: এই জাতীয় ক্ষেত্রে, hg help ciএটি আপনাকে ব্যাখ্যা করবে।
ক্রিস মরগান

আমি বিশ্বাস করি হিসাবে 'HG একত্রীকরণ' কম্যান্ড আপনাকে বলতে হবে, এখনও অন্য শেষে কমিট
চিপ Grandits

11

সম্পাদনা করুন খুব দেরিতে ... আমি জানি আপনার মন্তব্যটি পড়তে জানিয়ে যে আপনি ফিচার-এক্স চেঞ্জটি চারপাশে রাখতে চান, তাই এখানে ক্লোনিং পদ্ধতির কাজ হয় না।

আমি এখনও উত্তরটি এখানে দেব কারণ এটি অন্যকে সহায়তা করতে পারে।

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

যতদূর আমি বুঝতে পেরেছি এটি আপনার কাছে রয়েছে এবং একবার এবং সবার জন্য "বৈশিষ্ট্য-এক্স" মাথা থেকে মুক্তি পেতে চান:

@    changeset:   7:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| | o  changeset:   5:013a3e954cfd
| |/   summary:     Closed branch feature-x
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

সুতরাং আপনি এটি করুন:

hg clone . ../cleanedrepo --rev 7

এবং আপনার নিম্নলিখিতগুলি থাকবে এবং আপনি দেখতে পাবেন যে বৈশিষ্ট্যটি এক্সটি প্রকৃতপক্ষে চলে গেছে:

@    changeset:   5:00a7f69c8335
|\   tag:         tip
| |  parent:      4:31b6f976956b
| |  parent:      2:0a834fa43688
| |  summary:     merge
| |
| o  changeset:   4:31b6f976956b
| |  summary:     Changeset2
| |
| o  changeset:   3:5cb34be9e777
| |  parent:      1:1cc843e7f4b5
| |  summary:     Changeset 1
| |
o |  changeset:   2:0a834fa43688
|/   summary:     Changeset C
|
o  changeset:   1:1cc843e7f4b5
|  summary:     Changeset B
|
o  changeset:   0:a9afb25eaede
   summary:     Changeset A

আপনি যা চেয়েছিলেন তা আমি ভুল বুঝতে পেরেছি তবে দয়া করে হালকা করবেন না, আপনার ব্যবহারের ক্ষেত্রে পুনরুত্পাদন করতে আমি সময় নিয়েছি:)


7

আশ্চর্যের বিষয়, কোনও বৈশিষ্ট্য শাখা বন্ধ করার সবচেয়ে শক্তিশালী উপায় এখনও কেউই প্রস্তাব করেনি ... আপনি কেবল - ক্লোজ-ব্রাঞ্চ ফ্ল্যাগের সাথে মার্জ কমিটকে একত্রিত করতে পারেন (অর্থাত্ পরিবর্তিত ফাইলগুলি প্রতিশ্রুতিবদ্ধ করতে এবং একসাথে শাখা বন্ধ করতে পারেন):

hg up feature-x
hg merge default
hg ci -m "Merge feature-x and close branch" --close-branch
hg branch default -f

সুতরাং, এটি সব। রেগগ্রাফে অতিরিক্ত মাথা কেউ নেই। কোন অতিরিক্ত প্রতিশ্রুতি।


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

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

@ অ্যান্ড্রেভ্লাসভস্কিখ এই উত্তরের মূল বিষয়টি বৈশিষ্ট্য শাখার শেষ প্রতিশ্রুতি না দিয়ে মার্জটিতে শাখাটি বন্ধ করা।
ক্যাস্পারড

@ ট্যাভ mergeকমান্ড জারি করার আগে hg branchআপনি যে মার্জটির শাখার নামটি উন্মুক্ত রাখতে চান তা যাচাই করতে এটি ব্যবহার করা ভাল ধারণা হতে পারে ।
কাস্পারড

2
কাছাকাছি তাকালে এটি প্রদর্শিত হবে যে মার্জটি সর্বদা বন্ধ শাখায় থাকবে। কাঙ্ক্ষিত ফলাফলটি হ'ল এটি তার পিতা-মাতার একজনের শাখায় থাকে এবং তার অন্যান্য পিতামাতার শাখা বন্ধ করে দেয়। এটি সম্ভব হবে বলে মনে হয় না। সুতরাং এটি সর্বোপরি একটি কার্যক্ষম সমাধান হিসাবে দেখায় না। খুব খারাপ, আমি সত্যিই একটি শাখার সমাপ্তি স্থান হিসাবে মার্জটি ব্যবহার করতে চেয়েছিলাম।
ক্যাস্পারড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.