কীভাবে কোনও এসভিএন চেকআউটে স্থানীয় পরিবর্তনগুলি বাতিল করবেন?


197

আমি জমা দিতে চেয়েছিলেন পরিবর্তন একটি ওপেন সোর্স প্রকল্প জন্য, পর্যালোচনার জন্য।

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

আমি বিভিন্ন ব্যবহার করে জেনারেট করেছি svn di > ~/os/firstdiff.diff

সুতরাং আমার প্রশ্ন, আমার স্থানীয় পরিবর্তনগুলি কীভাবে বাতিল করবেন?

এটি করার কোনও এসভিএন উপায় আছে? যদি তা না হয় তবে আমাকে প্রতিটি ফাইলে যেতে হবে এবং আমার সমস্ত সম্পাদনা মুছতে হবে। তারপরে আমি একটি নতুন ডিফারেট তৈরি করে জমা দেব and

উত্তর:


253

svn revertকমান্ডটি কেবল ব্যবহার করুন , উদাহরণস্বরূপ:

svn revert some_file.php

এটি (প্রতিটি অন্যান্য এসএনএন কমান্ডের মতো) এসএনএনবুক রিসোর্স বা ম্যান পৃষ্ঠাতে এমনকি svn helpকমান্ডের মাধ্যমেও নথিবদ্ধ


2
বিনয়ক ব্যতীত তাঁর স্থানীয় অনিচ্ছাকৃত পরিবর্তনগুলি নিজের জন্য রাখতে চান।
বেসাইল স্টারিঙ্কেভিচ

2
@ বেসাইলস্টারিঙ্কেভিচ: আমি আবার প্রশ্নটি পড়েছি এবং দেখে মনে হচ্ছে যে অন্যান্য পরিবর্তনগুলিও প্রয়োজন নেই: "" "আমি যে পরিবর্তনগুলি করেছি, সেগুলি মূলত ডিবাগিংয়ের জন্য ছিল, এবং আর প্রয়োজন নেই" "" :)
কেড্রিক জুলিয়ান

1
হ্যাঁ ... তবে তিনি সেগুলি নিজের জন্য আরও রাখতে চান ... (তাঁর প্রশ্ন দুটি উপায়ই বোঝা যায়) be
বেসাইল স্টারিঙ্কেভিচ

193

আপনার এসএনএন রিভার্ট কমান্ডটি ব্যবহার করে সমস্ত পরিবর্তন ফিরিয়ে নিতে হবে :

  • কোনও ফাইলে পরিবর্তনগুলি ফিরিয়ে দিন: svn revert foo.c
  • ফাইলগুলির একটি সম্পূর্ণ ডিরেক্টরিটি ফিরিয়ে দিন: svn revert --recursive .

1
গুগলের দেওয়া প্রথম লিঙ্কটি সত্ত্বেও এসভিএন ১.১-এর রেফারেন্সটি কিছুটা পুরাতন ;)
সিড্রিক জুলিয়েন

সম্ভবত আপনার ফাইলের নামের কিছু অক্ষর উপেক্ষা করা যেতে পারে। উদাহরণস্বরূপ আইকন @ 2x.png। এসএনএন রিভার্ট আইকন @ 2x.png। এসএনএন স্কিপড 'আইকন' বলে।
topwik

1
এটি সেরা উত্তর। এটি চেক করা উচিত।
রিকফুসুসার

12
svn revert --recursive .আমাকে সাহায্য করে অনেক
পল ভার্গাস

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

15

একটি নির্দিষ্ট ফাইলে স্থানীয় পরিবর্তনগুলি বাতিল করতে:

$ svn revert example_directory/example_file.txt

একটি নির্দিষ্ট ফোল্ডারে স্থানীয় পরিবর্তনগুলি বাতিল করতে:

$ svn revert -R example_directory/

7

svn revertমূল পোস্টারটির জন্য সহজ ছিল যথেষ্ট। যাইহোক, একটি svn revertসাধারণ আপনি আরও সাধারণ ক্ষেত্রে করতে পারবেন না

  1. আপনি ভাগ এবং করতে চান উভয় সম্পাদনা করেছেন সম্পাদনাগুলি আছে আপনি শেয়ার করতে চান নাএকই ফাইল ,
  2. আছে স্থানীয় পরিবর্তনগুলি যে আপনি এখনও আপনার নিজস্ব ব্যক্তিগত সুবিধার জন্য পালন আগ্রহী

@ এরিকবিএসচুল্জের ব্যবহারের পরামর্শটি git add -pখুব যুক্তিসঙ্গত এবং এ জাতীয় ক্ষেত্রে সাধারণত প্রযোজ্য। উত্তরটিতে কেবল কিছু বিবরণ ছিল না। আপনার বর্তমান ডিরেক্টরিটি ডিরেক্টরিটি শ্যাবলযোগ্য প্যাচ তৈরি করতে চান তা ধরে নিলে আপনি এরকম কিছু করতে পারেন:

  1. সাবভারশন থেকে আলাদা ডিরেক্টরিতে মূল সংস্করণটি চেকআউট করুন (এমন একটি ডিরেক্টরি নাম নির্বাচন করুন যা বিদ্যমান নেই, এখানে সাব-ডিরেক্টরি ব্যবহার করে TMP/)।

    $ url=$(svn info . | awk '/^URL/ {print $2}')
    $ svn checkout "$url" TMP
    
  2. সেই বেসিক এসএনএন চেকআউটকে ভিত্তি হিসাবে ব্যবহার করে, .svn ডিরেক্টরিগুলি উপেক্ষা করে একটি গিট রিপোজিটরি শুরু করুন; আপনার অস্থায়ী গিট সংগ্রহস্থলটিতে এসএনএন মাথায় সমস্ত প্রতিশ্রুতিবদ্ধ

    $ cd TMP                                                     
    $ git init && echo ".svn/" > .gitignore
    $ git add -A && git commit
    $ cd ..
    
  3. নতুন প্রস্তুত গিট সংগ্রহস্থল মেটা ডেটা আপনার আসল ওয়ার্কিং ডিরেক্টরিতে অনুলিপি করুন; যেহেতু প্রাথমিক সাবভার্শন চেকআউট ডিরেক্টরিটির প্রয়োজন হয় না, আপনি এটি থেকে মুক্তি পেতে পারেন। আপনার ওয়ার্কিং ডিরেক্টরিটি এখন গিট এবং সাবভার্সন উভয়েরই সংগ্রহস্থল:

    $ mv TMP/.git .
    $ rm -rf TMP/
    
  4. আপনি এখন git add -pভাগ করে নিতে চান ঠিক কী তা ইন্টারেক্টিভভাবে বেছে নিতে শক্তিশালী এবং সুবিধাজনক ব্যবহার করতে পারেন এবং সেগুলি আপনার গিট সংগ্রহস্থলে প্রতিশ্রুতিবদ্ধ। যদি আপনাকে কমিটমেন্টগুলিতে ফাইল যুক্ত করতে হয় তবে git add <file-to-add>আগেও করুনgit commit

    $ git add -p                            
    <interactively select (and edit) the chunks you want to share>
    $ git add ${the_list_of_files_not_in_yet_in_svn_you_want_to_add}
    $ git commit
    
  5. প্রতিশ্রুতি ব্যবহার করে, আপনি ভাগ করতে চান এমন একটি প্যাচ প্রস্তুত করুন। এই উদ্দেশ্যে, আপনি ব্যবহার করতে পারেন git diff HEAD^..HEAD, বা git format-patch(প্যাচ বা একাধিক প্যাচযুক্ত ইমেলগুলি প্রেরণ করার জন্য সরাসরি পরবর্তীগুলি ব্যবহার করতে পারেন):

    $ git show -p HEAD > my-mighty-patch.patch
    

গিট মেটা ডেটা থেকে মুক্তি পাওয়ার জন্য, কেবলমাত্র করুন rm -rf .git/। যদি আপনি আসল ওয়ার্কিং ডিরেক্টরিটি হ্যাকিং চালিয়ে যাওয়ার পরিকল্পনা করেন তবে আপনি gitস্থানীয় পরিবর্তনগুলি পরিচালনা করতে চালিয়ে যেতে পারেন। এই ক্ষেত্রে আপনি সম্ভবত কীভাবে ব্যবহার করবেন তা শেখার বিনিয়োগ থেকে উপকৃত হবেন git svn

দ্রষ্টব্য: আপনি যদি এর সাথে পরিচিত হন gitতবে আপত্তি করা তুচ্ছ বিষয়। অন্যথায় এটি কিছুটা অগোছালো দেখাচ্ছে। গিটার কোনও বোঝাপড়া ছাড়াই ব্যবহার করা যেতে পারে এমন এসএনএন-র জন্য "ইন্টারেক্টিভ কমিট" বা "ইন্টারেক্টিভ প্যাচ ক্রিয়েশন" বাস্তবায়নের জন্য আপনি এই পদক্ষেপগুলির বাইরে স্ক্রিপ্ট লিখে এই পদ্ধতির সাধারণকরণ করতে পারেন।


3
বেনামে -1 কোনও ব্যাখ্যা ছাড়াই আপনাকে অনেক ধন্যবাদ। যেভাবেই হোক, এই পদ্ধতির অর্থটি কখন কার্যকর হবে তা স্পষ্ট করে উত্তরটি উন্নত করতে আমি সময় নিয়েছি।
এফওএফ

2
প্রসারণের জন্য অনেক ধন্যবাদ আমার কাছ থেকে +1! চিন্তা করবেন না। কঠিন ভিড়.
এরিচবিচুল্জ 20'15

1
থাম্ব আপ করার জন্য ধন্যবাদ, @ এরিচবিএসচুলজ! আস্তে আস্তে আমরা বিরোধীদের সত্ত্বেও বিশ্বের উন্নত স্থান করে তুলছি !!! ;-)
FooF

4

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

 svn diff important/file1.c important/file2.c > $HOME/os/firstdiff.diff

আপনার ডিফ প্রকাশের সময়, আপনি যে সংশোধন করছেন তার বিরুদ্ধে সংশোধনীটি বলতে ভুলবেন না।

অন্যরা যেমন উত্তর দিয়েছে, svn revertআপনিও সাবধানে ব্যবহার করতে পারেন । আপনি যদি ভবিষ্যতের কাজের জন্য স্থানীয় পরিবর্তনগুলি রাখতে চান তা নির্ভর করে ...


+1 এটি সমস্যার সেরা সমাধান তবে এই ক্ষেত্রে আমি আমার সমস্ত পরিবর্তন থেকে মুক্তি পেতে চাইতাম। অবশ্যই, আমি revertআমার পরিবর্তনগুলি সর্বদা চাই না । তাই আমি ভবিষ্যতে আপনার উপায় ব্যবহার করব।
বিনায়ক গর্গ

3

Os সংগ্রহস্থলের মূলটিতে যান এবং নিম্নলিখিত কমান্ডটি চালান

svn revert --depth=infinity .

1
svn revert -R .সংক্ষিপ্ত হতে পারে
jesjimher

1

আপনি যে ফাইলটি রাখতে চান তাতে কমিট কমান্ডটি ব্যবহার করতে পারেন এবং অবশিষ্ট স্থানীয় পরিবর্তনগুলি বাতিল করতে এসএনএন রিভার্ট কমান্ড ব্যবহার করতে পারেন

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