এসভিএন-তে একক ফাইলকে একটি নির্দিষ্ট সংশোধনীতে ফিরিয়ে দেওয়া


180

আমার কাছে একটি এসভিএন রেপোতে নীচে দেখানো একটি ফাইল রয়েছে যা আমি আগের সংস্করণে ফিরে যেতে চাই। এসভিএন-তে এটি করার উপায় কী? আমি কেবলমাত্র এই নির্দিষ্ট ফাইলটিকে পুরানো সংস্করণে ডাউনগ্রেড করতে চাই, পুরো রেপোকে নয়।

ধন্যবাদ।

$ svn log myfile.py
----------------------
r179 | xx | 2010-05-10

Change 3
----------------------
r175 | xx | 2010-05-08

Change 2
----------------------
r174 | xx | 2010-05-04

Initial

আপনি যখন প্রত্যাবর্তনের কথা বলেছেন, আপনার অর্থ কী ছিল, 7 বছর আগে, লোল
কল্পনা সনি

উত্তর:


181

আপনি যদি কেবল নিজের কার্যকরী অনুলিপিটিতে পুরানো ফাইলটি চান:

svn up -r 147 myfile.py

আপনি যদি রোলব্যাক করতে চান তবে এইটি দেখুন " বিপরীতে আমাদের কোডটির পুরানো সংস্করণে কীভাবে ফিরে আসবেন? "


8
তবে পরের বার এটি আপডেট করার পরে আপনি যে ফাইলটি চান তা ফিরে পায় ...: এস
অ্যান্ডিওস্টোহলিউড

2
যদি আপনি এটি আবার চান না, এসএনএন সেই ফাইলটি প্রতিশ্রুতিবদ্ধ করুন, আপনি যে সংস্করণটি চান তা রেপোতে রাখবেন
প্যাকেট ট্রেসার

14
এটি সম্ভবত প্রশ্নকর্তা যা চেয়েছিলেন বাস্তবে তা করে না। এটি ব্যবহার করে, কার্যকরী অনুলিপিটি পরিষ্কার এবং AS হিসাবে প্রতিশ্রুতিবদ্ধ হতে পারে না এবং নির্দিষ্ট সংস্করণ নম্বর ছাড়া একটি "এসএনএন আপডেট" সর্বশেষতম, অযাচিত সংস্করণটি পুনরুদ্ধার করবে।
সিএক্সজে

1
আমি কীভাবে পুনরায় উত্সাহিত ফাইলটি প্রতিশ্রুতিবদ্ধ করতে পারি?
মার্সিও

2
এটি একেবারেই সঠিক নয় কারণ, সিএক্সজে যেমন উল্লেখ করেছে, আপডেট হওয়া ফাইলটি প্রতিশ্রুতি দেওয়ার উপায় নেই। আপনি সম্ভবত মিচ ডেম্পসি বলেছেন (নোট, তবে - ফাইলটি ওভাররাইট করার জন্য জোর করে বলুন) নোট করুন: এসএনএন এক্সপোর্ট
ফোর্স

75

এসএনএন বিড়ালও একটি সংশোধনী আর্গ গ্রহণ করে!

svn cat -r 175 mydir/myfile > mydir/myfile


19
এটি পৃষ্ঠার সর্বোত্তম উত্তর। এটি পরিবর্তিত ফাইলটিকে এমন অবস্থায় ফেলে দেয় যা প্রতিশ্রুতিবদ্ধ হতে পারে।
dotancohen

আপনি যখন কোনও নতুন ফাইলে পেস্ট করছেন তখন এটি কাজ করে না বলে মনে হচ্ছে
আহ্নবিজক্যাড

হাহা এর দিকে ফিরে তাকাচ্ছে, আমি পোস্ট করার সময় আমি কী প্রসঙ্গে ভাবছিলাম তা বুদ্ধিমান। আমি মনে করতে পারি না। এটি অযৌক্তিক বলে মনে হয় না।
আহ্নবিজক্যাড

আপনি যখন নিজের পরিবর্তনগুলি পূর্বাবস্থায় ফিরিয়ে আনতে চান এবং কোনও সংস্করণ নিয়ন্ত্রণ প্রযুক্তিগত ছাড়াই কোনও পূর্ব-প্রতিশ্রুত অবস্থায় ফিরিয়ে আনতে চান তখন এটি সহজ এবং সরল।
বেনামে

57
svn revert filename 

এটি একটি একক ফাইলকে ফিরিয়ে আনবে।


4
দীর্ঘ কমান্ডের সাথে অন্য সমস্ত উত্তরগুলির কী হবে? ধন্যবাদ।
মাস্টারক্সিলো

আপনি স্বাগত জানাই। অন্যান্য উত্তরের সাথে আমার কী ধারণা আছে তা আমি জানি না .. lol
thestar

13
এটি কোন সংশোধনীতে ফিরে আসে? ডক বলেছেন যে কেবলমাত্র রেপোতে সর্বশেষের সাথে প্রতিস্থাপন করবে। পূর্ববর্তী সংস্করণে কীভাবে ফিরে যেতে হবে তা প্রশ্ন।
tgkprog

1
এটি রেপোর সর্বশেষতম সংস্করণে ফিরে আসে। যদি আপনি প্রশ্নের বিবরণটি পড়েন তবে মনে হয় তিনি কীভাবে একটি ডিরেক্টরি বা সম্পূর্ণ ডিরেক্টরিকে ফিরিয়ে আনবেন না was
থাস্টার

5
আমি বিশ্বাস করি যে এই সমস্ত কিছুই আপনার কার্যকরী অনুলিপিটিকে আবার মাথা ফেরানোর মাধ্যমে ধ্বংস করে দেয়। বা যা কখনও চেক আউট ছিল। svn আপডেট -r VER ফাইলটি করে নিশ্চিত করুন, তারপরে একটি এসএনএন রিভার্ট করুন।
জেরার্ড ওনিল

49

একটি একক ফাইলের জন্য, আপনি এটি করতে পারেন:

svn export -r <REV> svn://host/path/to/file/on/repos file.ext

আপনি করতে পারেন svn revert <file>তবে এটি কেবলমাত্র সর্বশেষ কার্যকরী অনুলিপি পুনরুদ্ধার করবে।


2
রফতানি করুন, তারপরে আপনার স্থানীয় অনুলিপিটিতে এটি আটকান, তারপরে আবার প্রতিশ্রুতিবদ্ধ?
tgkprog

1
@tgkprog এটি করার এক উপায়, হ্যাঁ
মিচ ডেম্পসে

@tgkprog এবং "পছন্দসই" উপায় কী?
hbogert

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

20

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

svn merge -r head:[revision-number-to-revert-to] [file-path]এটি করার জন্য সবচেয়ে সহজ এবং সহজ উপায় আইএমও। দয়া করে মনে রাখবেন যে মুছে ফেলা ফাইলটি ফিরিয়ে আনলে এইভাবে কাজ হবে বলে মনে হচ্ছে না [1]। নিম্নলিখিত প্রশ্নটিও দেখুন: কোনও ফাইলের পূর্ববর্তী এসভিএন পুনর্বিবেচনায় ফিরে যাওয়ার ভাল উপায়?

[1] তার জন্য আপনি এটি svn cp -r [rev-number] [repo-URI/file-path]@[rev-number] [repo-URI/file-path] && svn upদেখতে চান , এসভিএন থেকে মুছে ফেলা ফাইলটি পুনরুদ্ধার করার সঠিক উপায়টি কী?


আমি মন্তব্য করতে চাই যে কমপক্ষে আমার সাবভার্সনের সংস্করণটির svn mergeজন্য কোনও কারণে একাধিক ফাইলকে যুক্তি হিসাবে গ্রহণ করবে না। এই ক্ষেত্রে মনে হয় এটি কেবল কিছুই করেনি (কোনও ত্রুটি বার্তা ছাড়াই)।
Wrzlprmft

তবে আমার কমান্ডটি প্রতিটি ফাইলের জন্য এটি পুনরাবৃত্তি করে এখনও কাজ করে, তাই না?
মিশেল মোলার

হ্যাঁ, এটা সত্যিই না।
Wrzlprmft

1
এটি পরিষ্কার যে সম্মত।
কেভিনজি

13

সর্বোত্তম উপায় হ'ল:

svn merge -c -RevisionToUndo ^/trunk

আপনি যে ফাইলটি পূর্বাবস্থায় ফিরিয়ে নিতে চান না কেবল সেগুলি ফিরিয়ে দেওয়ার চেয়ে এটি পুনর্বিবেচনার সমস্ত ফাইলকে পূর্বাবস্থায় ফিরিয়ে আনবে। -সংশোধনের উপসর্গ হিসাবে ড্যাশ ( ) ভুলে যাবেন না ।

svn revert File1 File2

এখন পরিবর্তনগুলি প্রতিশ্রুতিবদ্ধ।


9

তুমি করতে চাও

svn merge -r [revision to revert from]:[revision to revert to] [path/filename]

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


7

আমি svn catকমান্ডের মাধ্যমে এটি করা সহজ বলে মনে করেছি যাতে আপনাকে কোনও পুনর্বিবেচনা নির্দিষ্ট করতে না হয়।

svn cat mydir/myfile > mydir/myfile

এটি সম্ভবত টাইমস্ট্যাম্পগুলির মতো ইনোড (মেটাডেটা) ডেটার ভূমিকা নেবে না।


তারপরে ফাইলটি প্রতিশ্রুতিবদ্ধ করুন যাতে এটি
রেপোতে

3
এটি আমার জন্য আপডেটের চেয়ে ভাল কাজ করেছে। কারণ আপডেট আপনাকে সেই ফাইলটিতে সংশোধন করতে দেয় না। (এস.এন.এন. 1.8.3)
fe_lix_

7

অবাক কেউ এই উল্লেখ করেনি

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

svn merge -r HEAD:PREV file

আপনার যদি মন্তব্য থাকে তবে সম্পাদনা করার আগে দয়া করে এখানে আলোচনা করুন?
কল্পেশ সনি

1
প্রশ্নটির দৃশ্যের জন্য কি সাম্প্রতিক পরিবর্তনের বিপরীত সংশ্লেষের দরকার নেই, যেমন আমাদের হেড থেকে পিআরভিতে যাওয়ার জন্য প্রয়োজনীয় পরিবর্তনগুলি প্রয়োগ করা উচিত?
নিক রুসো

4
কমান্ডটি svn merge -r HEAD:PREV file@ নিক রুশো বলেছিলেন হিসাবে হওয়া উচিত
হেইঞ্জ

4

যদি এটি কেবল দু'একটি ফাইল হয় এবং আপনি যদি টরটোইজ এসভিএন ব্যবহার করেন তবে আপনি নীচের পদ্ধতিটি ব্যবহার করতে পারেন:

  1. আপনার উত্স ফাইলটিতে ডান ক্লিক করুন, এবং "কচ্ছপ এসভিএন" -> "লগ দেখান" নির্বাচন করুন।
  2. লগের একটি পুনর্বিবেচনায় ডান ক্লিক করুন এবং "এতে পুনর্বিবেচনা সংরক্ষণ করুন ..." নির্বাচন করুন।
  3. পুরানো রিভিশনটি আপনার বর্তমান ফাইলটিকে ওভাররাইট করতে দিন।
  4. ওভাররাইট করা উত্স ফাইলটি প্রতিশ্রুতিবদ্ধ।

এটি একটি নতুন রূপান্তরিত ফাইল সংরক্ষণ করে যেমন ফাইল-এক্সএক্সএক্সএক্সএক্সএক্স, যেখানে এক্সএক্সএক্সএক্সএক্স পুরানো সংশোধন নম্বর। আমরা এখন কি করব? নতুন পুনর্বিবেচনা (প্রধান উদাহরণ) মুছুন, নতুন ফাইলটির নাম পরিবর্তন করুন, যুক্ত করুন, প্রতিশ্রুতিবদ্ধ?
হেইঞ্জ

না, ফাইল নামের সংশোধন নম্বর দিয়ে এটি সংরক্ষণ করবেন না। এটি একই ফাইলের বর্তমান সংস্করণ হিসাবে ঠিক একই ফাইলের নাম দিয়ে সংরক্ষণ করুন (অন্য কথায়, ফাইলের নামে কোনও এক্সএক্সএক্সএক্সএক্স)। তারপরে তার পরে কেবল একটি সাধারণ অঙ্গীকার করুন।
ইলিং

4

কেবলমাত্র @ মিচ ড্যাম্পসি উত্তরটি যুক্ত করুন যেহেতু আমার কাছে এখনও মন্তব্য করার মতো যথেষ্ট সংবাদ নেই।

svn export -r <REV> svn://host/path/to/file/on/repos --force

- ফোর্স যুক্ত করা রফতানির সাথে স্থানীয় অনুলিপিটি মুছে ফেলা হবে এবং তারপরে আপনি এটিকে সংগ্রহস্থলটিতে ঠেলে দেওয়ার জন্য একটি এসএনএন কমিট করতে পারেন।


এবং এটি সেরা উত্তর :)
Zgr3doo

কেন এটি সেরা উত্তর? এটি ইতিহাসকে "এসএনএন ওয়ে" পরিচালনা করে না
জেসন এস

2

একটি একক ফাইলের জন্য বিকল্প বিকল্পটি পুরানো সংশোধন সহ ফাইলটির বর্তমান সংস্করণটি "প্রতিস্থাপন" করা:

svn rm file.ext
svn cp svn://host/path/to/file/on/repo/file.ext@<REV> file.ext
svn ci

এটিতে অতিরিক্ত বৈশিষ্ট্য রয়েছে যে অযাচিত পরিবর্তনগুলি এই ফাইলটির লগ (যেমন এসএনএন লগ ফাইল.সেক্সট) এ প্রদর্শিত হয় না।


1

যদি আপনি একটি নির্দিষ্ট সংশোধন থেকে পৃথক ফাইলটি রোল করতে চান এবং প্রতিশ্রুতি রাখতে সক্ষম হন তবে তা করুন:

এসএনএন মার্জ-সি - [ওল্ডরेव #] [ফাইলের নাম]

অর্থাত। svn merge -c -150 myfile.py

সংশোধন নম্বর নেতিবাচক নোট করুন


-1
sudo svn revert filename

এটি একটি একক ফাইলকে ফিরিয়ে দেওয়ার সর্বোত্তম উপায়


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