সমস্ত স্থানীয় চেঞ্জসেটগুলি মুছুন এবং গাছটিতে ফিরুন


95

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

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

আমি জানি যে hg update -Cকোনও স্থানীয় পরিবর্তন ওভাররাইট করে। তবে আমি কীভাবে কোনও স্থানীয় কমিট মুছব?

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


উত্তর:


129

যখন সহজ উপায় (একটি নতুন hg clone) ব্যবহারিক না হয়, আমি ব্যবহার করি hg strip:

% hg outgoing -l 1
% hg strip $rev # replace $rev with the revision number from outgoing

hg outgoingচুপ থাকা পর্যন্ত পুনরাবৃত্তি করুন । নোট করুন যে hg strip $revবিলুপ্ত হয় $revএবং এর সমস্ত বংশধর।

নোট করুন যে আপনাকে প্রথমে stripআপনার মার্চুরিয়াল সেটিংসে সক্ষম করতে হবে ।

পিএস: পুনর্নির্মাণের ভাষাটি ব্যবহার করা এবং করা একটি আরও চৌকস পদ্ধতির মধ্যে রয়েছে:

% hg strip 'roots(outgoing())'

4
ধন্যবাদ! আমি এমন পরিস্থিতিতে শেষ হয়েছি যা এটিকে পুরোপুরি সমাধান করেছে, যা নিয়ে কোনও ঝামেলা নেই।
eswald

4
এটি আমাকে উপরের বড় ফিক্সগুলি থেকে বাঁচিয়েছে, খুব সাধারণ, আপনাকে ধন্যবাদ!
ডেভিড সি

4
কারও যদি hg strip 'roots(outgoing())'কাজ করতে সমস্যা হয় তা এটি স্বীকৃতি না দেওয়ার কারণে 'roots(outgoing())'। আমি এটি দিয়ে কাজ করতে সক্ষম হয়েছি hg strip "roots(outgoing())"
jsea

@ সম্ব্রেইমারাইন cmd.exe, হ্যাঁ
মাত্র

21

আপনি একটি স্থানীয় ক্লোন তৈরি করতে চাইবেন যেখানে আপনি কেবল রিমোট রিপোজিটরিতে উপস্থিত পরিবর্তনসেটগুলি সংরক্ষণ করেন। ব্যবহারের TortoiseHg , hg logবা চিত্রে অনুরূপ আপনার পুনর্বিবেচনা যা আউট যে সাম্প্রতিক সংস্করণ তুমি করা হয়নি করতে (জগাখিচুড়ি শুরু করার আগে এক)। ব্যবহার hg outgoingএখানে সাহায্য করতে পারেন - এটা সব changesets আপনার তৈরি করা তালিকা প্রস্তুত করা যাবে - যারা কোন তুলনায় সংস্করণ সংখ্যা আগের বাছাই।

যদি লক্ষ্য পুনর্বিবেচনা বলা হয় goodএবং আপনার ক্লোনটি কল করা হয় foo, তবে করুন:

hg clone -r good foo foo-clean

এটি একটি দ্রুত, স্থানীয় অপারেশন হবে - সবকিছু আবার ডাউনলোড করার কোনও কারণ নেইfoo-cleanক্লোন শুধুমাত্র সংস্করণ পর্যন্ত changesets উপস্থিত থাকবে good। আপনি এখন প্রতিস্থাপন করতে পারেন foo-clean/.hg/hgrcসঙ্গে foo/.hg/hgrcযেমন ডিফল্ট ধাক্কা / পুল পাথ হিসাবে আপনার সংগ্রহস্থলের-স্থানীয় সেটিংস সংরক্ষণ হবে।

আপনি যখন সন্তুষ্ট হন যা foo-cleanআপনার যা কিছু প্রয়োজন তা থেকে থাকে fooতবে কেবল মুছুন fooএবং পুনরায় নামকরণ foo-cleanকরুন foo। একটি না hg pullআপনার ক্লোন মধ্যে দূরবর্তী সংগ্রহস্থল থেকে কোনো নতুন changesets পেতে এবং স্বাভাবিক মত অবিরত।


যদি কেউ রিমোট রিপোজিটরিতে নতুন পরিবর্তনগুলি ঠেলে না থাকে তবে goodউপরের মতো আপনি কোন সংশোধনটি ব্যবহার করতে চান তা নির্ধারণ করা খুব সহজ: আপনাকে রিমোট রিপোজিটরিতে টিপটির hg id defaultআইডি বলবে।


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

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

9

ঠিক আছে. সুতরাং কেবলমাত্র সমস্ত স্থানীয় স্টাফ, hg initনতুন স্থানীয় সংগ্রহশালা এবং আপনার কাছে hg pullথাকা সর্বশেষ টিপ মুছুন । hg updateএই পরে ভুলবেন না ।


ধন্যবাদ আপনি যখন 'সমস্ত স্থানীয় জিনিস মুছুন' বলবেন, আপনি কি পুরো সংগ্রহস্থলটি মুছবেন বা কেবল আমার পরিবর্তনগুলি মুছবেন? এইচ.জি আর কি করে (গুগল করেছে তবে একটি সাধারণ ব্যাখ্যা দেখতে পাচ্ছে না) এবং এর সাথে আমার কোনও পতাকা ব্যবহার করা দরকার? এটি কি আমার মার্কুরিয়াল .hgrc পছন্দগুলি পছন্দ করে?
রিচার্ড

আপডেট: আমি যদি প্রকল্পের মূল ডিরেক্টরিতে সমস্ত কিছু মুছতে পারি, তবে 'hg init' টাইপ করুন, আমি 'abort: repository' পাই। আগে থেকেই আছে!'. আমার কি নতুন ডিরেক্টরি থেকে সেট আপ এবং কাজ করা দরকার? আমি যদি সম্ভব না হয়ে থাকতাম ... অবশ্যই স্থানীয়ভাবে আমি যা কিছু করেছি তার সবই মেরে ফেলার একটা সহজ উপায় অবশ্যই আছে ?!
রিচার্ড

হ্যাঁ, সমস্ত সংগ্রহস্থল স্টাফ সহ সমস্ত কিছু মুছুন। নতুন ক্লিন ফোল্ডার থেকে শুরু করুন। আপনার পছন্দগুলি আপনি ব্যাকআপ ফাইলে সংরক্ষণ করতে পারেন এবং তারপরে hg init পুনঃনাম দিয়ে আপনি যে নতুন সংগ্রহশালা তৈরি করেন সেগুলিতে সেগুলি পুনরুদ্ধার করতে পারেন। আরআইডি
২le

6
alemjerus: hg init+ hg pull= hg cloneপার্থক্যটি হ'ল আপনার জন্য hg cloneএকটি দুর্দান্ত .hg/hgrcফাইল তৈরি করে এবং hg cloneএটি একই ফাইল সিস্টেমে ক্লোনিং করার সময় স্থান সংরক্ষণ করতে হার্ডলিঙ্কগুলি ব্যবহার করবে।
মার্টিন গিসলার

রিচার্ড: আউটপুট hg help initএখানে: selenic.com/mercurial/hg.1.html#init তবে সম্ভবত এটি খুব বিরল ? আপনার আরও সহায়তার প্রয়োজন হলে আমাদের মেইলিং লিস্টে একটি মেইল ​​প্রেরণ করুন! দেখুন: mercurial.selenic.com/wiki/ মেলিংলিস্ট
মার্টিন গিজলার

5

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

এইচজি স্ট্রিপ পুনর্বিবেচনা

আপনার স্থানীয় সংগ্রহস্থলে কোনও সংশোধন এবং এর সাবট্রিটি হত্যা করতে।

https://www.mercurial-scm.org/wiki/Strip

ইতিমধ্যে ধাক্কা দেওয়া হয়েছে এমন কোনও কিছুর জন্য এটি ব্যবহার করার চেষ্টা করবেন না।


আপনি এটি সর্বজনীন পুনর্বিবেচনার জন্য ব্যবহার করতে পারেন, তবে আপনি যদি আবার টানেন তবে এটি আবার উপস্থিত হবে। (এইচজি স্ট্রিপটি কেবল স্থানীয় সংগ্রহস্থলের সাথে কাজ করে))
মাইক রোসফট

2

আপনার স্থানীয় সিস্টেমে আপনার সমস্ত কিছু মুছুন এবং রিমোট রেপোটিকে পুনরায় ক্লোন করুন।


2
hg স্ট্রিপ `hg আউট --template" {রেভ} {লেখক} \ n "| গ্রেপ YOUR_AUTHOR_NAME | কাট-ডি "" -ফ 1`

আমার জন্য কৌশল।

এটি সমস্ত সংশোধনগুলি স্ট্রিপ করে যা আপনার লেখকের নাম দিয়ে তৈরি করা পূর্বনির্ধারিত সংগ্রহস্থলে ধাক্কা দেয় না।

আপনি এই স্টাইলটি ডিফল্ট সংগ্রহস্থলের সাথে না দেখে অন্য একটি সংগ্রহস্থল দিয়ে পরীক্ষা করতে পারেন

hg স্ট্রিপ `hg আউট OTHER_REPO_ALIAS --template" {রেভ} {লেখক} \ n "| গ্রেপ YOUR_AUTHOR_NAME | কাট-ডি "" -ফ 1`

0

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

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