আমি কীভাবে কোনও এসভিএন প্রতিশ্রুতি ফিরিয়ে দেব?


303

এসভিএন কমিটকে কীভাবে রিভার্ট করতে হবে তার বিভিন্ন উদাহরণ আমি পেয়েছি

svn merge -r [current_version]:[previous_version] [repository_url]

অথবা

svn merge -c -[R] .

তবে তাদের দুজনেরই কোনও কাজ বলে মনে হচ্ছে না। আমি সেই কমান্ডগুলি চেষ্টা করেছিলাম এবং হাতে ফাইলগুলি পরিবর্তন করেছিলাম checked

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


16
তাদের কোনওটিই কাজ না করায় আপনি কি কোনও উত্তর গ্রহণ করেন নি?
2rs2ts

4
আপনি যদি আক্ষরিক উত্তর চান তবে "এসএনএন মার্জ -c -1944" ব্যবহার করুন। এটি কাজ করেছে কিনা তা খতিয়ে দেখার জন্য: "এসএনএন ডিফ"
জন স্যাম্পসন 21



যদি কেস হয় তবে আমার 1943 (ভাল প্রতিশ্রুতি), 1944 (খারাপ প্রতিশ্রুতি), তারপর 1945 (ভাল প্রতিশ্রুতি), তারপর 1946 (ভাল প্রতিশ্রুতি) আছে। এখন আমি কেবল 1944 (খারাপ প্রতিশ্রুতি) মুছে ফেলতে এবং 1944 এর পরে সমস্ত সংশোধন রাখতে চাই, এর অর্থ আমি এই সমস্ত সংশোধনীর 1943,1945,1946 (কেবল 1944 অপসারণ) এর মতো একটি ফলাফল চাই, আমার কী করা উচিত ??
ভাভিন_ম

উত্তর:


447

উভয় উদাহরণ কাজ করা উচিত, কিন্তু

svn merge -r UPREV:LOWREV . সীমা পূর্বাবস্থায় ফিরিয়ে আনুন

svn merge -c -REV . একক সংশোধন পূর্বাবস্থায় ফিরুন

এই বাক্য গঠনতে - যদি বর্তমান দির ডাব্লুসি হয় এবং (প্রতিটি মার্জ করার পরে যেমন করা আবশ্যক) আপনি ফলাফলগুলি প্রতিশ্রুতিবদ্ধ

আপনি কি লগ দেখতে চান?


9
@ দ্বিজোহনস্টন - হ্যাঁ, সবসময় ডাব্লিউসি তে মার্জ হয় এবং এটি সার্ভার-সাইড টাস্ক নয়
অলস ব্যাজার

14
svn: Merge source required। কোন পাশা.
2rs2ts

27
@ 2rs2ts দেখে মনে হচ্ছে আপনি 'বর্তমান ডিরেক্টরিতে এটি করুন' নির্ধারণ করার জন্য পিছনের বিন্দুটি ভুলে গেছেন।
ডালিন

14
আপনি একই সময়ে একাধিক একক svn merge -c -42587,-42589 .
কমিটগুলিও

1
@ অাহ্নবিজ্যাকড - পুনর্বিবেচনা (একক), যা আপনি পূর্বাবস্থায় রাখতে চান
অলস ব্যাজার

130

আপনি যদি কচ্ছপ এসভিএন ক্লায়েন্ট ব্যবহার করছেন তবে এটি সহজেই হয়ে গেছে প্রদর্শন লগ কথোপকথনের মাধ্যমে


5
এটি করা এখন পর্যন্ত সবচেয়ে সহজ উপায়
মার্ককু কে।

5
এটি পুরানো। বর্তমান সংস্করণে ক্লায়েন্টের জন্য আর একটি প্রসঙ্গ-মেনু উপলব্ধ নেই।
ব্যবহারকারী 1789573

19
কি? কচ্ছপ এসভিএন একটি প্রসঙ্গ মেনু, এবং ডায়ালগগুলি বর্ধিত হয়। "আর কোনও প্রসঙ্গ মেনু নেই" বলতে কী বোঝায়? সেখানে অবশ্যই আছে!
বেন

@ আমার মনে হয়েছে ব্যবহারকারী 1789573 উত্তরের সাথে সংযুক্ত টিউটোরিয়ালে "প্রসঙ্গ মেনু" এর সুস্পষ্ট উল্লেখের জন্য কিছুটা বিভ্রান্ত হচ্ছিল।
টম ক্যাটুল্লো

2
আপনি যদি এটি পরে দেখছেন তবে এটি সেখানে (এখনও) রয়েছে। শো লগ স্ক্রিনে, পুনর্বিবেচনাটি ডানদিকে ক্লিক করুন এবং একটি "এই রিভিশনটিতে ফিরে যান" বিকল্পটি রয়েছে। এটি টরটোইজএসভিএন 1.9.4 এ 27285 তৈরি করুন I আমি এটি ব্যবহার করেছি এবং আপনাকে বলতে পারি এটি ঠিকঠাক কাজ করে।
ব্রুস ভ্যান হর্ন

64

svn merge -r 1944:1943 .আপনার কাজের অনুলিপিতে r1944 এর পরিবর্তনগুলি ফিরিয়ে নেওয়া উচিত। তারপরে আপনি আপনার কার্যকরী অনুলিপি (বিভিন্ন সহ) এর পরিবর্তনগুলি পর্যালোচনা করতে পারেন, তবে রিপোজিটরিতে রিভার্ট প্রয়োগ করার জন্য আপনাকে প্রতিশ্রুতিবদ্ধ হতে হবে।


4
কাজ করে না, মার্জ উত্স প্রয়োজন। svn merge -r 1944:1943 .পরিবর্তে চেষ্টা করা, কিন্তু কিছুই পরিবর্তন হয়নি।
অ্যালেক্স

R1944 সাল থেকে সংগ্রহস্থলটি কি উন্নত হয়েছে? যদি তাই হয়, r1943 এবং r1944 এর মধ্যে যে পরিবর্তনগুলি হয়েছে একই লাইনগুলিতে কি বিরোধী পরিবর্তনগুলি রয়েছে?
onon15

আমি 1945 এর সংশোধনীতে এসেছি এবং এতে কোনও বিরোধ নেই বলে মনে হচ্ছে। না কিছু দেয় svn statusনা svn diff
অ্যালেক্স

7
ত্রুটি:svn: Try 'svn help' for more info svn: Merge source required
অ্যালেক্স

5
তবে svn merge -r 1945:1943 .মনে হয় কাজ করেছে। আমি মনে করি আমি বুঝতে পেরেছি: আপনার 'কার্যকারিতা সংগ্রহস্থলটিতে' খারাপ 'প্রতিশ্রুতিবদ্ধ হওয়ার আগে' সংস্করণটি মার্জ করতে হবে। এটি ঠিক আছে যখন আপনি আগের কমিটের একটি সাধারণ 'রিভার্ট' করতে চান। তবে আপনি যদি সংস্করণ 1900 দিয়ে করা পরিবর্তনগুলি ফিরে পেতে চান?
অ্যালেক্স

44

প্রথমে ওয়ার্কিং কপিটি 1943 এ ফিরিয়ে দিন।

> svn merge -c -1943 .

দ্বিতীয়ত, কি কমিট করতে চলেছে তা পরীক্ষা করুন।

> svn status

তৃতীয়, সংস্করণ 1945।

> svn commit -m "Fix bad commit."

চতুর্থ, নতুন লগ দেখুন।

> svn log -l 4

------------------------------------------------------------------------
1945 | myname | 2015-04-20 19:20:51 -0700 (Mon, 20 Apr 2015) | 1 line

Fix bad commit.
------------------------------------------------------------------------
1944 | myname | 2015-04-20 19:09:58 -0700 (Mon, 20 Apr 2015) | 1 line

This is the bad commit that I made.
------------------------------------------------------------------------
1943 | myname | 2015-04-20 18:36:45 -0700 (Mon, 20 Apr 2015) | 1 line

This was a good commit.
------------------------------------------------------------------------

1
যদি কেস হয় তবে আমার 1943 (ভাল প্রতিশ্রুতি), 1944 (খারাপ প্রতিশ্রুতি), তারপর 1945 (ভাল প্রতিশ্রুতি), তারপর 1946 (ভাল প্রতিশ্রুতি) আছে। এখন আমি কেবল 1944 (খারাপ প্রতিশ্রুতি) মুছে ফেলতে এবং 1944 এর পরে সমস্ত সংশোধন রাখতে চাই, এর অর্থ আমি এই সমস্ত সংশোধনীর 1943,1945,1946 (কেবল 1944 অপসারণ) এর মতো একটি ফলাফল চাই, আমার কী করা উচিত ??
ভাভিন_ম

26

এটি একটি পুনর্বিবেচনা "অননুমোদিত" করা অসম্ভব, তবে আপনি আপনার কার্যকরী অনুলিপিটি 1943 সংস্করণে রূপান্তর করতে পারেন এবং 1945 সংস্করণ হিসাবে প্রতিশ্রুতি দিতে পারেন 194 1943 এবং 1945 সংস্করণগুলি কার্যকরভাবে পরিবর্তনগুলি ফিরিয়ে আনবে ical


18
কেবল বিরক্তিকরভাবে নির্ভুল হওয়ার জন্য, আমি মন্তব্য করব যে আপনার যদি ভাণ্ডারটিতে অ্যাডমিন অ্যাক্সেস থাকে তবে আপনি "অসমাপ্ত" করতে পারেন। এটি ব্যবহার করে প্রদত্ত সংশোধন পর্যন্ত ক্লোন সংগ্রহস্থল তৈরি করে svn dumpএবং তারপরে svn load। তবে অবশ্যই এটি সাধারণ পরিস্থিতিতে ব্যবহার করা উচিত নয়।
onon15

4
আমি আপত্তি ছাড়তে চাই না, আমি একটি নির্দিষ্ট প্রতিশ্রুতি উল্টো করে একটি নতুন কমিট নম্বর তৈরি করতে চাই। সেটগুলি বলুন যে আমি 1944 সংস্করণ পরীক্ষা করে দেখেছি, 1945 সালে একটি প্রতিশ্রুতিবদ্ধ করেছি, যা আমি 'ফিরিয়ে' দিতে চাই। তারপরে আমি একটি সংস্করণ 1946 রাখতে চাই, যার ফাইলগুলি 1944 সংস্করণের সংস্করণগুলির সাথে একরকম। (অবশ্যই ইতিহাস বাদে) হুকুম কি?
অ্যালেক্স

//, @ অ্যালেক্স, আমি এটিতেও আগ্রহী, বিশেষত অনুরূপ কিছুতে $ git revert। এতক্ষণ গিট ব্যবহার করার পরে এসভিএন শিখতে কিছুটা অসুবিধা পেয়েছি।
নাথান বাসানিজ

9

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

svn merge --dry-run -rHEAD:PREV https://example.com/svn/myproject/trunk

শুকনো রানটি দেখতে ভাল লাগলে - ড্রায়া-রান ছাড়াই কমান্ডটি চালান

পুনর্বিবেচনার পরিবর্তনটি যাচাই করুন এবং পুনরায় প্রতিশ্রুতিবদ্ধ। সংস্করণ নম্বর ব্রাউজ করার চেষ্টা করুন:

svn log

4
F=code.c
REV=123
svn diff -c $REV $F | patch -R -p0 \
    && svn commit -m "undid rev $REV" $F

এর জন্য কি স্থানীয় অনুলিপিটি খারাপ সংশোধন থেকে আলাদা হওয়া দরকার?
এলিজার মিরন

2

অ্যালেক্স, এটি চেষ্টা করুন: এসএনএন মার্জ [ওয়ার্কিংফোল্ডারপাথ] -আর 1944: 1943


2

যদিও ইতিমধ্যে দেওয়া পরামর্শগুলি কিছু লোকের জন্য কার্যকর হতে পারে, এটি আমার ক্ষেত্রে কার্যকর হয় না। সংশ্লেষ সম্পাদন করার সময়, ব্যবহারকারীরা rev 1443হালনাগাদ করেন rev 1445, 1444তারা সমান হওয়া সত্ত্বেও পরিবর্তিত সমস্ত ফাইল সিঙ্ক করে1443 থেকে করে। হালনাগাদটি একেবারে না দেখার জন্য আমার শেষ ব্যবহারকারীদের দরকার ছিল।

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

copy -r 1443 file:///<your_branch> file:///<your_branch_at_correct_rev>
svn move file:///<your_branch> file:///<backup_branch>
svn move file:///<your_branch_at_correct_rev> file:///<your_branch>

এটি আমার পক্ষে কাজ করেছে, সম্ভবত এটি অন্য কারও পক্ষে সহায়ক হবে =)


2
svn merge -c -M PATH

এটি আমার জীবন বাঁচিয়েছিল।

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


1

আমি উপরেরটি চেষ্টা করেছিলাম, ( svn merge) এবং আপনি ঠিক বলেছেন, এটি জ্যাক করে। যাহোক

svn update -r <revision> <target> [-R]

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

mv <target> <target backup>
svn update <target>
mv <target backup> <target>
svn commit -m "Reverted commit on <target>" <target>

আমার বিশেষ ক্ষেত্রে আমার লক্ষ্য interfaces/AngelInterface.php। আমি ফাইলটিতে পরিবর্তন করেছি, তাদের প্রতিশ্রুতিবদ্ধ করেছি, বিল্ড কম্পিউটারটি পিএইচপিডক সংকলক চালিয়েছি এবং আমার পরিবর্তনগুলিকে সময় নষ্ট করে দেখলাম। svn log interfaces/AngelInterface.phpআমার পরিবর্তনটিকে r22060 হিসাবে দেখায় এবং সেই ফাইলটিতে পূর্বের প্রতিশ্রুতি r22059 ছিল। সুতরাং আমি svn update -r 22059 interfaces/AngelInterface.phpকোডটি শেষ করতে পেরেছি কারণ এটি আবার -22059 এ ছিল। তারপরে: -

mv interfaces/AngelInterface.php interfaces/AngelInterface.php~
svn update interfaces/AngelInterface.php
mv interfaces/AngelInterface.php~ interfaces/AngelInterface.php
svn commit -m "reverted -r22060" interfaces/AngelInterface.php

বিকল্পভাবে উপরের সমস্তটির . -Rজায়গায় নির্দিষ্ট করে ডিরেক্টরিতে আমি একই জিনিসটি করতে পারি interfaces/AngelInterface.php


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

আরও তদন্ত করে আমি দেখতে পাচ্ছি যে এসভিএনডমিন ব্যবহার করে ইতিহাস থেকে প্রতিশ্রুতি সরিয়ে ফেলা সম্ভব তবে আপনি এর বিরুদ্ধে দৃ strongly়ভাবে পরামর্শ দিচ্ছেন। দেখুন stackoverflow.com/questions/5566327/...
sibaz

0

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

svnrdump dump -r 1:<rev> <url> > filename.dump

Svnrdump কমান্ড svnadmin ডাম্প হিসাবে একই ফাংশন সম্পাদন করে কিন্তু একটি দূরবর্তী রেপোতে কাজ করে।

এরপরে ডাম্প ফাইলটি আপনার পছন্দের রেপোতে আমদানি করুন। এটি বিয়ানস্টকে ভাল কাজ করার জন্য পরীক্ষা করা হয়েছিল।

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