সাবভারশনে আমি কীভাবে আমাদের কোডটির পুরানো সংস্করণে ফিরে যেতে পারি?


486

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

আমি vs08 এ "anksvn" ব্যবহার করছি।

আমার পিসিতে আমি যে সংস্করণটি চাই তা আমার কাছে রয়েছে তবে প্রতিশ্রুতি ব্যর্থ হচ্ছে; আমি যে বার্তাটি পেয়েছি তা হল "প্রতিশ্রুতিবদ্ধতা ব্যর্থ, ফাইল বা ডিরেক্টরি পুরানো।"

আমার পিসিতে সাবভারশন ক্লায়েন্টও রয়েছে।

উত্তর:


783

বর্তমান এবং পূর্ববর্তী সংস্করণে মধ্যে একটি পরিবর্তন প্রয়োগ - মূলত আপনি "একত্রীকরণ পিছন" প্রয়োজন থেকে এবং তারপর আবার কমিট (তাই আপনি যদি একটি কাজ কপি পুরোনো সংস্করণ মত খুঁজছেন দিয়ে শেষ) বর্তমান সংস্করণ। সুতরাং উদাহরণস্বরূপ 150 (বর্তমান) থেকে পুনরায় সংশোধন 140 এ ফিরে যান:

svn update
svn merge -r 150:140 .
svn commit -m "Rolled back to r140"

সাবভারশন রেড বুকের এ সম্পর্কে একটি ভাল বিভাগ রয়েছে


3
তবে মার্জটি আমার পরিবর্তনগুলি এবং নতুন সংশোধনাকে ওভাররাইড করে না।
চেন কিন্নরোট

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

8
গ্রহন এবং উপকণ্ঠের সাহায্যে আপনি আপনার প্রকল্প, টিম / প্রদর্শন ইতিহাসে ডান ক্লিক করতে পারেন, তারপরে আপনি "পূর্বাবস্থায় ফিরে যেতে চান" সংশোধনগুলি নির্বাচন করতে পারেন এবং "নির্বাচিত পুনর্বিবেচনার পরিবর্তনগুলি প্রত্যাবর্তন" নির্বাচন করে অন্য একটি রাইট-ক্লিকের সাহায্যে নির্বাচন করতে পারেন।
ফেগো

36
মাথা পুনর্বিবেচনা থেকে ফিরে যেতে আপনি লিখতেও পারেন svn merge -r HEAD:140
sschmeck

3
@ ড্যাভগার্সিয়ার কচ্ছপ এসভিএন নির্দেশাবলী আমার পক্ষে ঠিক ছিল না, কমপক্ষে সমস্ত ফাইল পুনর্বিবেচনাতে ফিরিয়ে আনতে হবে না (টরটোইসএসভিএন ১.৮.৮ ব্যবহার করে)। ফোল্ডারে ডান ক্লিক করুন, TortoisSVN-> লগ দেখান নির্বাচন করুন। আপনি যে পুনর্বিবেচনাটি ফিরিয়ে আনতে চান তা চয়ন করুন, "এই পুনর্বিবেচনা থেকে পরিবর্তনগুলি প্রত্যাহার করুন" বলে ডান ক্লিক করুন। পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ।
mhenry1384

177

আপনি শুধুমাত্র নতুন পরিবর্তনগুলি কমিট করতে পারেন মাথা বৈধরূপে প্রতিষ্ঠিত সরকারকে উত্খাত ইতিহাসের।

আপনার পিসিতে আপনার ভাল কপির সাথে সরাসরি কিছু করতে না পারার কারণ এটির .svnফোল্ডাররা জানেন যে এটি অতীত থেকে কোড, সুতরাং কোনও প্রতিশ্রুতি দেওয়ার আগে একটি আপডেট প্রয়োজন।

ভাল সংশোধন নম্বরটি সন্ধান করুন এবং প্রত্যাবর্তন করুন

  1. আপনি চাইলে পুরানো অনুলিপিটির সংশোধন নম্বরটি সন্ধান করুন।

    এর সাথে আপনার বর্তমান সংশোধনটি পান :

    svn info --show-item revision
    # or
    svn log

    বা আপনার প্রকল্পের পুরানো সংস্করণগুলি পরীক্ষা করতে , ব্যবহার করুন:

    svn update -r <earlier_revision_number>

    আপনি সঠিক সংশোধন নম্বর না পাওয়া পর্যন্ত।

  2. ভাল পুনর্বিবেচনা নম্বরটি নীচে নোট করুন ( 123নীচের উদাহরণগুলির জন্য অনুমান করে)।

  3. সর্বশেষ সংস্করণে আপডেট করুন:

    svn update
  4. আপনি যে রিভিশনটি চান তা এবং সর্বশেষতম সংস্করণের মধ্যে থাকা সমস্ত পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনুন:

    svn merge -r HEAD:123 .
    svn commit "Reverted to revision 123"

    (উপরে জোন স্কিটের উত্তর হিসাবে একই।)

যদি আপনি পুনর্বিবেচনা নম্বরটি খুঁজে না পান

যদি আপনি পুরানো অনুলিপিটি খুঁজে না পান এবং আপনি কেবল আপনার পিসিতে ফাইলগুলি প্রতিশ্রুতিবদ্ধ করতে চান:

  1. আপনার ভাল সংস্করণটির একটি অনুলিপি তৈরি করুন (তবে কোনও .svnফোল্ডার ছাড়াই ):

    cd ..
    rsync -ai --exclude=.svn  project/  project-good/
  2. এখন আপনার কাছে সর্বশেষতম সংস্করণ রয়েছে তা নিশ্চিত করুন:

    cd project
    svn update
    # or make a fresh checkout
    svn checkout <url>
  3. ওয়ার্কিং কপির উপরের অংশে আপনার ভাল সংস্করণটি অনুলিপি করুন।

    এই কমান্ডটি আপনার ভাল কপির মধ্যে নেই এমন কার্যকারী গাছ থেকে কোনও ফাইল অনুলিপি করবে এবং মুছে ফেলবে, তবে এটি বিদ্যমান .svnফোল্ডারগুলিকে প্রভাবিত করবে না ।

    cd ..
    rsync -ai --exclude=.svn --delete  project-good/  project/

    আপনার কাছে আরএসসিএনসি না থাকলে আপনি ব্যবহার করতে পারেন cp -aতবে আপনাকে কোনও অযাচিত ফাইল ম্যানুয়ালি মুছতে হবে।

  4. আপনার এখন যা আছে তা প্রতিশ্রুতিবদ্ধ হওয়া উচিত।

    cd project
    svn commit "Reverted to good copy"

2
এসএনএন এটিকে কোনও পরিবর্তন হিসাবে ব্যাখ্যা করে না, আমি এটি প্রতিশ্রুতি দিতে পারি না।
স্যান্ডবার্গ

এসএনএন মার্জ -আর হেড: 12345। প্রত্যাবর্তনের জন্য সঠিক কমান্ডটি, কোনও আপডেট -আর করবেন না। আপনি পাগল ব্যক্তি।
পেঁচা

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

36

শুধু এই লাইন ব্যবহার করুন

এসএনএন আপডেট -আর আপনার ওল্ড রিভেশন

আপনি ব্যবহার করে আপনার বর্তমান সংশোধনটি জানতে পারবেন:

এসএনএন তথ্য


15
এটি সমস্যার সমাধান করে না। পরিবর্তে, এর ফলে প্রশ্নটি জিজ্ঞাসা করার সময় প্রশ্নকর্তাটি সেই রাষ্ট্রের উপস্থিতি তৈরি করে।
ইনগো শ্যাচাল-শ্প্প

1
আপনি যদি এই পরামর্শটি মেনে চলাতে দুর্ভাগ্য হন তবে চালান: "এসএনএন রেজলিউশন - ওয়ার্কিং -আর স্বীকার করুন" "
আউল

27

পুরো চেক-ইনটিকে পূর্বাবস্থায় ফেলার জন্য মার্জ ব্যবহারের স্ট্যান্ডার্ড পদ্ধতিটি যদি আপনি যা করতে চান তবে তা দুর্দান্ত কাজ করে। কখনও কখনও, যদিও আপনি যা করতে চান তা হ'ল একক ফাইলকে রিভার্ট করা। এটি করার কোনও বৈধ উপায় নেই, তবে একটি হ্যাক রয়েছে:

  1. আপনি এসএনএন লগ ব্যবহার করে যে সংস্করণটি চান তা সন্ধান করুন।
  2. এসএনএন এর রফতানি সাবকম্যান্ড ব্যবহার করুন:

    এসএনএন রফতানি http: // url-to- your -file @ 123 / tmp / filename

(যেখানে 123 ফাইলের একটি ভাল সংস্করণের জন্য পুনর্বিবেচনা সংখ্যা)) তারপরে পুরানো ফাইলটি ওভাররাইট করতে সেই একক ফাইলটি সরিয়ে বা অনুলিপি করুন। পরিবর্তিত ফাইল চেক করুন এবং আপনার কাজ সম্পন্ন হয়েছে।


কচ্ছপ-এসএনএন ব্যবহার করে আমি কোনও একটি ফাইলে রাইট-ক্লিক করতে এবং এটি মার্জ করতে পারি। svnপাশাপাশি এটি ব্যবহার করার উপায় আছে ?
এলসি

10
svn cat -r 123 path-in-your-working-copy > path-in-your-working-copy
dash17291


5

আমি মনে করি এটি সবচেয়ে উপযুক্ত:

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

এই ক্ষেত্রে:

svn merge -r 5616:5612 https://<your_svn_repository>/

এটিতে একীভূত কোডটি পূর্বের পুনর্বিবেচনার পিছনে থাকবে, তবে আপনি এটি প্রতিশ্রুতিবদ্ধ করতে পারেন।


3

এটি আমার জন্য কাজ করেছিলাম এবং কাজ করেছি।

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

  1. দলে যান -> ইতিহাস দেখান।
  2. আপনি এড়াতে চান এমন সংশোধনী বা পরিসীমাটিতে ডান ক্লিক করুন।
  3. "রিভার্ট পরিবর্তনগুলি" বিকল্পটি নির্বাচন করুন।

এটি আপনার কাজের অনুলিপিতে পরিবর্তনগুলি পূর্বাবস্থায়িত করে একটি বিপরীত মার্জ চালাবে।

কেবল কোডটি পর্যালোচনা করুন এবং প্রতিশ্রুতিবদ্ধ।


2

আপনি ফিরে যেতে চান এমন সর্বোচ্চ শ্রেণিবিন্যাসের ডান ক্লিক করুন >> RevertবাRevert to Revision


2

পূর্ববর্তী উত্তরগুলির বেশিরভাগই একটি বিপরীত মার্জ ব্যবহার করে আসছে এবং এটি সাধারণত সঠিক উত্তর। যাইহোক, একটি পরিস্থিতি আছে (যা আমার কাছে ঘটেছিল) যেখানে তা নেই।

ছোট্ট পরিবর্তন করার সময় আমি ঘটনাক্রমে ইউনিক্স লাইন এন্ডিং সহ একটি ফাইল ডস লাইন এন্ডিংয়ে পরিবর্তন করেছি এবং এটি প্রতিশ্রুতিবদ্ধ। লাইন শেষগুলি পরিবর্তন করে এবং আবারও প্রতিশ্রুতিবদ্ধ হয়ে, বা বিপরীত সংশ্লেষের মাধ্যমে এটি সহজেই পূর্বাবস্থায় ফেলা যায় svn blameতবে ফাইলটির প্রতিটি লাইনের উত্স হিসাবে আমার সম্পাদনাটিকে তালিকাভুক্ত করার ফলে এটির প্রভাব রয়েছে । (মজার বিষয়, উইন্ডোজে টর্টোইসএসভিএন এটি দ্বারা প্রভাবিত হয় না; কেবল কমান্ড লাইনsvn blame ))

আপনি যদি বিবৃত হিসাবে ইতিহাস বজায় রাখতে চান তবে svn blameআমার মনে হয় আপনার নিম্নলিখিতগুলি করা দরকার:

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

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

svn rm svn+ssh://path/to/file
svn copy svn+ssh://path/to/file@xxx svn+ssh://path/to -m"Restore good copy"
svn update
<restore the edits>
svn commit -m"Restore edits"

মনে রাখবেন যে সংগ্রহশালার অনুলিপিটির জন্য গন্তব্যটির একটি ফাইলের নাম নয়, ডিরেক্টরি হতে হবে।


1

প্রকল্পটি ডান ক্লিক করুন> এর সাথে প্রতিস্থাপন> সংশোধন বা ইউআরএল> আপনি যে নির্দিষ্ট সংস্করণটি ফিরে যেতে চান তা নির্বাচন করুন।

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


1

এই পৃষ্ঠায় বিপজ্জনক উত্তর অনেক আছে। নোট করুন যে এসভিএন সংস্করণ ১.6 থেকে, আপডেট -r করা গাছের দ্বন্দ্বের কারণ হতে পারে যা কাফকেরেসেকের দুঃস্বপ্ন হারাতে এমন একটি সম্ভাব্য ডেটাতে দ্রুত বেড়ে যায় যেখানে আপনি গাছের সংঘাতের বিষয়ে তথ্যের জন্য গুগল করছেন।

কোনও সংস্করণে ফিরে যাওয়ার সঠিক উপায় হ'ল:

svn merge -r HEAD:12345 .

যেখানে 12345 সংস্করণ নম্বর। বিন্দুটি ভুলে যাবেন না।


0

পুরানো সংস্করণে সিঙ্ক করুন এবং এটি প্রতিশ্রুতিবদ্ধ। এই কৌতুক করতে হবে।

এখানে পূর্বাবস্থায় ফিরে আসা পরিবর্তনগুলিও রয়েছে explanation


0

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

চেরি-পিক মার্জ করুন

ম্যান পেজ থেকে।

  1. এই ফর্মটিকে 'চেরি-পিক' মার্জ বলা হয়: '-r এন: এম' সংশোধন N এবং এম এর মধ্যে উত্স শাখার ইতিহাসের পার্থক্য বোঝায়

    পরিবর্তনগুলি পূর্বাবস্থায় ফেলার জন্য একটি 'বিপরীত পরিসর' ব্যবহার করা যেতে পারে। উদাহরণস্বরূপ, উত্স এবং লক্ষ্য একই শাখায় উল্লেখ করা হলে, পূর্বে প্রতিশ্রুতিবদ্ধ সংশোধনটি 'পূর্বাবস্থায় ফেরা' হতে পারে। একটি বিপরীত পরিসীমা , এন এম চেয়ে বেশী 'n -r: এম', বা '-c' বিকল্পটি একটি ঋণাত্মক সংখ্যা সঙ্গে ব্যবহার করা হয়: '-c -m' সমতূল্য 'এম -r:'। এর মতো পরিবর্তনগুলি পূর্বাবস্থায় ফেরাও 'বিপরীত মার্জ' সম্পাদন হিসাবে পরিচিত।


  • যদি উত্সটি কোনও ফাইল হয় তবে তারপরে পার্থক্যগুলি সেই ফাইলটিতে প্রয়োগ করা হয় (পূর্ববর্তী পরিবর্তনগুলি বিপরীতমুখীকরণের জন্য দরকারী)। অন্যথায় যদি উত্সটি ডিরেক্টরি হয় তবে লক্ষ্যটি '' এ ডিফল্ট হয়।

    সাধারণ ব্যবহারে ওয়ার্কিং অনুলিপিটি কোনও একক সংশোধনীতে, কোনও স্থানীয় পরিবর্তন এবং কোনও সুইচড সাবট্রির সাথে আপ টু ডেট হওয়া উচিত।

উদাহরণ:

svn merge -r 2983:289 path/to/file

এটি স্থানীয় অনুলিপি প্রতিস্থাপন করবে [2983] (যা উপরের উক্তি অনুসারে সার্ভারের সাথে সমন্বয়যুক্ত হওয়া উচিত - আপনার দায়বদ্ধতা) সার্ভার থেকে পুনর্বিবেচনার 289 সংশোধন করে। পরিবর্তনটি স্থানীয়ভাবে হয়, যার অর্থ যদি আপনার একটি পরিষ্কার চেকআউট থাকে, তবে পরিবর্তনগুলি প্রতিশ্রুতি দেওয়ার আগে পরিদর্শন করা যেতে পারে।


-1

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

আমার অনেক স্থানীয় পরিবর্তন হয়েছে এবং স্থানীয় অনুলিপিতে সেগুলি ফেলে দেওয়ার এবং এসভিএন-এর শেষ স্থিতিশীল সংস্করণটি চেকআউট করার দরকার ছিল।

  1. উপেক্ষা করা ফাইলগুলি সহ সমস্ত ফাইলের স্থিতি পরীক্ষা করুন।

  2. সদ্য যুক্ত হওয়া এবং উপেক্ষা করা ফাইলগুলি পেতে সমস্ত লাইনকে গ্রেপ করুন।

  3. তাদের সাথে প্রতিস্থাপন করুন //

  4. এবং সমস্ত লাইন rm -rf।

    svn অবস্থা - না-উপেক্ষা | গ্রেপ '^ [? আমি]' | | সেড "এস / ^ [? আমি] //" | xargs -I {} rm -rf "{}"

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