আমি কীভাবে মার্চুরিয়ালে মুছে ফেলা ফাইলটি পুনরুদ্ধার করতে পারি (যদি তা হয় তবে)?


101

দুর্ভাগ্যক্রমে, সি এল এলির বিপরীতে জিইউআই ব্যবহার করে, আমি একটি মার্কুরিয়াল প্রকল্পের প্রতিটি ফাইল সরিয়েছি।

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

আমি সম্ভবত এখানে আমার নিজের প্রশ্নের উত্তর দিচ্ছি তবে ফাইলগুলি ডিরেক্টরি থেকে চলে গিয়েছিল এবং পুনরুদ্ধার করতে ট্র্যাশে ছিল না তাই আমি মনে করব যে অপসারণটি কি তা অপরিবর্তনীয়?

PS আমি জানি hg forgetবা hg remove -Afডিরেক্টরি থেকে মোছা না করেই মুছে ফেলব তবে আমার প্রশ্নের সাথে আমি ত্রুটিটি করেছি যার দ্বারা আমি ক্রিয়াটি সম্পূর্ণরূপে চিন্তা করার বিরোধিতা করেছি।


4
আপনার কোনও পুরানো পুনর্বিবেচনা
যাচাই

সমস্যাটি হ'ল আমি প্রতিশ্রুতিবদ্ধ করেছি, সম্পাদনা করেছি, আর (উত্সাহিত)। সুতরাং এই ক্রমের পরে হ্যাঁ, আমি আগের প্রতিশ্রুতিটি পেয়েছিলাম তাই ফিরে গেলাম এবং টাইম মেশিনের আকারে আমার ব্যাকআপ থাকায় আমি শেষ পরিবর্তনগুলি পেয়ে যাব তারপরে এগুলিকে যুক্ত করতে এবং তারপরে প্রতিশ্রুতিবদ্ধ। তবে আমি যদি ব্যাকআপ না পেতাম তবে পরিবর্তনগুলি হারিয়ে যেতে পারত।
বেগুনি পাইলট

4
সম্পর্কিত প্রশ্ন যা আপনাকে কেবল ফাইলের নামগুলি (দ্রুত) অনুসন্ধান করতে দেয়: স্ট্যাকওভারফ্লো
মাইকেল প্রাইয়ার

উত্তর:


153

প্রথমে hg grepআপনি পুনরুদ্ধার করতে চান এমন মুছে ফেলা ফাইলটি সন্ধান করুন। এই কমান্ডের আউটপুট আপনাকে শেষ সংশোধনী দেখাবে যার জন্য ফাইলটি উপস্থিত ছিল এবং মুছে ফেলা ফাইলের পথ। দ্বিতীয়ত, চালান hg revert -r <revision number> <path to deleted file> মুছে ফেলা ফাইলটি এখন আপনার কার্যকরী অনুলিপিতে থাকবে, প্রতিশ্রুতিবদ্ধ হওয়ার জন্য প্রস্তুত।


5
ধন্যবাদ আমার জন্য সুন্দরভাবে কাজ করেছে। "উদ্দেশ্যমূলকভাবে মুছে ফেলা ফাইলটি কীভাবে পুনরায় প্রতিষ্ঠিত করব?" এর উত্তর সন্ধান করছিলাম?
এনসি।

গ্রহন থেকে এটি ডান বাছাই করে টিম নির্বাচন করুন -> রিভার্ট করুন
এমিল

4
আরেকটি উপায় ফাইল ধারণকারী সংস্করণ খুঁজে পেতেhg log -I '**file.ext'
mpen

4
শুধু একটি অবগতির জন্য: আপনি চান কমিট এখনও ফাইল, যে সংশোধনীর নম্বরের না এক এটির সরানোর!
লুকাশ নুথ

8

মন্তব্য থেকে উদ্ধৃতি:

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

যদি এটি হয় তবে আপনার কেবলমাত্র পূর্ববর্তী সংশোধনীতে ওয়ার্কিং ডিরেক্টরি আপডেট করতে হবে:

$ hg update -C -r-2

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

$ hg log -v


4

মার্চেরিয়াল 1.6 এবং তারপরের জন্য

আপনি যদি মুছে ফেলা ফাইলটির নাম জানেন তবে সহজেই এর সংশোধনটি এটি সহ পেতে পারেন:

hg log -r "removes('NAME.c')"

এটি আপনাকে ডাইনিতে পুনর্বিবেচনা দেবে যে নামটি একটি ফাইল ডেকে আনে।

তারপরে আপনি ফাইলটি পূর্ববর্তী সংশোধন (অন্যান্য উত্তরের মত) দিয়ে ফিরতে পারবেন:

hg revert -r <revision number> <path to deleted file>

আপনি যা জানেন তার সাথে মানিয়ে নেওয়ার পরিবর্তে আপনি ফাইলের নাম প্যাটার্ন ব্যবহার করতে পারেন, উদাহরণস্বরূপ আপনি **/NAME.cসমস্ত ডিরেক্টরিতে অনুসন্ধান করতে ব্যবহার করতে পারেন । ফাইল নাম প্যাটার্সে আপনি এটি সম্পর্কে পড়তে পারেন । এবং নতুন রিসেট স্পেসিফিকেশন সম্পর্কে জানতে এই লিঙ্কটি ব্যবহার করুন ।


1

গৃহীত উত্তরের একটি সংযোজন - আপনি যদি কোনও প্রতিশ্রুতিবদ্ধভাবে সমস্ত অপসারণগুলি পূর্বাবস্থায় ফেরাতে চান তবে এটি দ্রুত। আমি এটিতে কয়েক শতাধিক ফাইল সহ একটি বড় ফোল্ডারটি মুছলাম এবং এটি করেছিলাম hg addremove, যা আমার উদ্দেশ্য নয়, তাই এই সমস্ত মুছে ফেলাতে হবে।

ব্যবহার Mercurial সংগ্রহস্থলের ইতিহাস খুঁজুন মোছা ফাইল, দ্রুত? + xargs + tr, সমস্ত সংশোধন -3 অপসারণগুলি সংস্করণে পুনর্বিবেচনা -4 থেকে ফেরান:

hg log -r -3 --template "{rev}: {file_dels}\n" | tr ' ' '\n' | xargs hg revert -r -4 

মনে রাখবেন যে আপনার কোনও ফাইলের নামে ফাঁক থাকলে এটি ব্যর্থ হবে; http://hgbook.red-bean.com/read/customizing-the-output-of-mercurial.html এর এমন কোনও টেম্পলেট নেই যা এই মুহুর্তে {file_dels}ভাগ হয়ে গেছে \n


0

আপনি এর সাথে কোনও রেপোতে সর্বশেষ প্রতিশ্রুতিটি পূর্বাবস্থায় ফেরাতে পারেন hg rollback। রোলব্যাকের মাত্র এক স্তর উপলব্ধ রয়েছে, সুতরাং আপনি যদি একাধিক প্রতিশ্রুতি দিয়ে অপসারণ করেন তবে এটি আপনার পরিবর্তনটিকে পুরোপুরি পূর্বাবস্থায় ফিরিয়ে আনবে না। এটি কেবলমাত্র আপনার স্থানীয় সংগ্রহশালায় কাজ করে, সুতরাং আপনি যদি চাপ দিয়েছেন তবে আপনি এটিকে দূরবর্তী রেপোতে পূর্বাবস্থায় ফিরিয়ে নিতে পারবেন না।


4
না এটি কাজ করে না। আমি মারকুরিয়াল ডিস্ট্রিবিউটেড এসসিএম (সংস্করণ 1.4.1 + 20091201) সহ একটি ম্যাক ব্যবহার করছি। আমি একটি সংগ্রহস্থল স্থাপন করেছি, সমস্ত প্রতিশ্রুতিবদ্ধ করেছি, মুছে ফেলা এবং আবার প্রতিশ্রুতিবদ্ধ কিন্তু এটি কেবল আর (পূর্ববর্তী) হিসাবে চিহ্নিত ফাইলগুলির একটি তালিকা ফিরিয়ে আনবে তবে ফাইলগুলি আসলে ফিরিয়ে আনবে না। যদি আমি কিছু না করার আগে ফাইলগুলিকে আর (উত্সাহিত) এবং রোলব্যাক হিসাবে চিহ্নিত করি তবে কিছু হয় না।
বেগুনি পাইলট

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

4
hg rollbackসরানো ফাইল পুনরুদ্ধার করবে না কারণ ফাইলটি মোছা প্রতিশ্রুতি লেনদেনের অংশ নয়।
মির্চি

4
সেটা ঠিক. আপনি যদি এমন সম্পাদনাগুলি সন্ধানের জন্য সন্ধান করেন যা অপসারণের আগে প্রতিশ্রুতিবদ্ধ হয় নি, সেগুলি হারিয়ে গেছে।
ataylor

0

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

এটি চেষ্টা করার আগে একটি ব্যাকআপ তৈরি করুন, কারণ এটি মার্চুরিয়াল এর চেঞ্জসেটের ডেটাবেসকে বদলে দেবে।


0

নীচের পদ্ধতিটি সোজা এবং এত নির্বোধ যে এটি ভুল হতে পারে না। আপনি যদি একাধিক ফাইল মুছে ফেলে বা পুনরায় নামকরণ করেন, তবে ঠিক আছে।

hg clone mydirectory mydirectory1

এবং এখন আপনি এমসি শুরু করেন (বা ফার ম্যানেজার) এবং এটি যা হয়ে গেছে তার তুলনা করুন।

যখন এটি সম্পন্ন করা, শুধু মুছতে mydirectory1


0

নিম্নলিখিত আমার জন্য কাজ করে।

hg revert -r <Revision Number> <File Name>

(Filesচ্ছিক, সমস্ত ফাইল প্রত্যাবর্তনের জন্য)

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