অস্থায়ীভাবে সাবভারশনে অনির্ধারিত পরিবর্তনগুলি দূরে রাখুন (একটি "গিট স্ট্যাশ")


312

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

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

গিট স্ট্যাশ ঠিক তা করতে দেয়। সরাসরি বা কিছু প্লাগইন বা স্ক্রিপ্ট সহ সাবভারশন দিয়ে এটি করার কোনও উপায় আছে কি? গ্রহন প্লাগইনগুলিও ঠিক থাকবে।


6
শুধু কৌতূহলী, তবে গিট-এসএনএন ব্যবহার করবেন না কেন?
সেমিগ্রিন্টি

3
কিছু প্রাসঙ্গিক সংবাদ: infoworld.com/d/application-de વિકાસment/… (উদ্ধৃতি: "তিনি উল্লেখ করেছেন যে আসন্ন সাবভার্সন ১.৮ প্রকাশটি গিট স্ট্যাশ এর মতো বৈশিষ্ট্য সহ এটি গিটের ক্ষমতার নিকটে নিয়ে আসে, যাতে কোনও বিকাশকারী স্থানীয়ভাবে পরিবর্তন করতে পারে এবং তারপরে সেগুলি সেট করে রাখুন এবং অফলাইন কমিট করে, যা কোনও বিকাশকারী অফলাইনে থাকলে পরিবর্তনগুলি সম্পূর্ণ করে এবং বিকাশকারী পুনরায় সংযোগ স্থাপনের পরে মাস্টার সংগ্রহস্থলে সরিয়ে নিয়ে যায় ""
সেবাস্তিয়ান ভ্যান ড্যান ব্রুক

1
আপডেট (২০১২-০৪-২6 পর্যন্ত): কোনও ইটিএ ছাড়াই এখন সেল্ভিংয়ের সময়সূচীটি 1.9 এর জন্য নির্ধারিত হয়েছে। সুতরাং এটি কিছুটা সময় নিতে পারে ...
স্ল্যাসকে দিন

10
আপডেট (২০১২-১১-১-17 হিসাবে): এখন শেভলিং 1.10 এর জন্য নির্ধারিত হয়েছে। এটি সর্বদা <পরবর্তী প্রকাশ +1> এর জন্য নির্ধারিত থাকবে? ;-)
সলেস্কে

3
আপডেট (2015-03-23 ​​হিসাবে, 2 বছর এবং অর্ধেক পরে): ভাল খবর হ'ল শেলভিং এখনও 1.10 এর জন্য নির্ধারিত। খারাপ সংবাদগুলি হ'ল ইটিএ: কিউ 2 2015 (অস্থায়ী) প্রকাশ 1.9.0 / 2017? (সর্বোত্তমভাবে অনুমানমূলক) প্রকাশ করুন 1.10.0 ( subversion.apache.org/roadmap.html )
ribamar

উত্তর:


69

যখন আমি আমার কার্যকরী অনুলিপিতে একটি কাজ থেকে অনির্ধারিত পরিবর্তন পেয়েছি এবং আমাকে অন্য কোনও কাজে স্যুইচ করা দরকার, আমি দুটি কাজের মধ্যে একটি করি:

  1. দ্বিতীয় কাজের জন্য একটি নতুন ওয়ার্কিং কপি দেখুন।

    অথবা

  2. একটি শাখা শুরু করুন:

    workingcopy$ svn copy CURRENT_URL_OF_WORKING_COPY SOME_BRANCH
    workingcopy$ svn switch SOME_BRANCH
    workingcopy$ svn commit -m "work in progress"
    workingcoyp$ svn switch WHATEVER_I_WAS_WORKING_ON_BEFORE
    

আমার কিছু স্ক্রিপ্ট রয়েছে যা এটি স্বয়ংক্রিয় করতে সহায়তা করে।



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

2
@ ক্নিটল: এই শাখাটি একটি অসম্পূর্ণ পথে তৈরি করা যেতে পারে যা প্রকল্পের ডিফল্ট শাখা বা ট্যাগগুলির অবস্থানের বাইরে is উদাহরণস্বরূপ, একটি দল মনোনীত করতে পারে project\temp\<creationdate-reason>বা project\personal\<creationdate-reason>এই উদ্দেশ্যে।
রওয়ং

12
এটি এখনও দুর্ভাগ্যজনক যে শাখাটি একেবারেই সার্ভারে তৈরি করতে হয়েছিল। এটি এমন নয় যে এই জাতীয় শাখাগুলি প্রচুর ডেটা সদৃশ করে, তবে তারা প্রচুর অপ্রয়োজনীয় তথ্যসূত্র তৈরি করে যা গিটের মতো কোনও সিস্টেম ছাড়াই করে।
thepeer

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

337

এই ব্লগ পোস্টটি ডিফ এবং প্যাচ ব্যবহার করার পরামর্শ দেয়।

  • git stash প্রায় হয়ে যায় svn diff > patch_name.patch; svn revert -R .
  • git stash apply হয়ে patch -p0 < patch_name.patch

নোট করুন যে এটি মেটাডেটা পরিবর্তনগুলি বা (আমার মনে হয়) ডিরেক্টরি তৈরি করে / মুছে ফেলবে না। (হ্যাঁ, এসএনএন গিটারের বিপরীতে ডিরেক্টরি বিষয়বস্তু থেকে আলাদা করে এগুলি অনুসরণ করে))


13
এই একজন আপতিক সদৃশ stackoverflow.com/questions/1554278/... - পাঠালেই চলবে upvotes।
ওয়াল্টার মুন্ড

2
এটি বাইনারি ফাইল অন্তর্ভুক্ত বলে মনে হয় না, যা বিরক্তিকর। কমপক্ষে প্যাচ উত্পন্ন করার জন্য TortoiseSVN ব্যবহার করার সময়।
এঙ্গুলারসেন


6
svn patch patch_name.patchপরিবর্তে আপনি যদি ব্যবহার করেন তবে আপনি মেটাডেটা ট্র্যাক করতে পারেন patch -p0কারণ তারা প্যাচ ফাইলে রয়েছে এবং এসএনএন প্যাচ তাদের বোঝে।
মাদুর

এটিতে বাহ্যিকের পরিবর্তনগুলি অন্তর্ভুক্ত নয়।
কংগ্রেসবঙ্গাস

182

আপনি svn diffপ্যাচ ফাইলে আপনার বর্তমান পরিবর্তনগুলি সংরক্ষণ করতে পারেন , তারপরে আপনার কার্যকরী অনুলিপিটি ফিরিয়ে দিন:

svn diff > stash.patch
svn revert -R .

আপনি আপনার প্রস্তুতিমূলক বৈশিষ্ট্যটি প্রয়োগ করার পরে আপনি প্যাচটি ইউটিলিটি দিয়ে প্রয়োগ করতে পারেন:

patch < stash.patch

অন্যরা যেমন উল্লেখ করেছে যে এটি svn:propertiesএবং বৃক্ষ ক্রিয়াকলাপগুলির সাথে কাজ করবে না (ফাইল এবং ডিরেক্টরিগুলি যুক্ত, অপসারণ, পুনরায় নামকরণ) করুন।

বাইনারি ফাইলগুলিও সমস্যা দিতে পারে, আমি জানি না কীভাবে প্যাচ (বা এই ক্ষেত্রে কচ্ছপ এসভিএন সেগুলি পরিচালনা করে)।


4
এটি সম্ভবত মুছে ফেলা / পুনঃনামযুক্ত ফাইলগুলির সাথে খুব ভাল কাজ করে না, আমার ধারণা।
জেস্পের ই

7
"পরিবর্তে প্যাচগুলি কেন ব্যবহার করবেন না" শীর্ষক বাক্সটি দেখুন? কেন এটি খারাপ ধারণা তা বুঝতে svnbook.red-bean.com/en/1.5/…যান
এসবিআই

4
@ এসবিআই: আমি মনে করি না যে এটি ডাউনটাভোটের জন্য একটি বৈধ সমর্থনযোগ্যতা। এটি কোনও "খারাপ উত্তর" নয়। এটি কেবলমাত্র পুরো উত্তর নয় all আমি মনে করি না যে এই ব্যক্তি তার পরামর্শের জন্য শাস্তির দাবিদার। আপনি কি তার পরিবর্তে উত্তর না পছন্দ করবেন? যদি হ্যাঁ, তবে হ্যাঁ, আপনার ডাউনটি করা উচিত। অন্যথায় এটি ভাল উদ্দেশ্য শাস্তি দিচ্ছে।
সেদাত কাপানোগলু

5
আমার মতো অন্য কেউ যদি এটিকে হালকা ওজনের সমাধানের মতো দেখায় এবং এটি চেষ্টা করার সিদ্ধান্ত নেয় তবে আমাকে প্যাচ -p0 <stash.patch ব্যবহার করতে হবে - অন্যথায় এটি প্যাচগুলিতে ফাইলগুলি সন্ধান না করতে পারার অভিযোগ করেছে
কাপউনটাই

4
বিশেষত যদি আপনি গিট ব্যাকগ্রাউন্ড থেকে এসেছেন এবং বিভিন্ন কারণে এসভিএন ব্যবহার করতে বাধ্য হন তবে এই পরামর্শটি সহায়তা করে। প্যাচের প্রথমবারের ব্যবহারকারীদের জন্য ইতিমধ্যে দেওয়া পরামর্শে একটি ছোট্ট উন্নতি: $ patch --strip=0 < stash.patch এটি নিশ্চিত করবে যে আপনি যখন প্যাচ প্রয়োগ করছেন তখন প্যাচ আপনাকে ফাইলের নাম জিজ্ঞাসা করবে না।
ksinkar

43

সবচেয়ে সহজ উপায় হ'ল এইভাবে অস্থায়ী শাখা ব্যবহার করা:

$ svn copy ^/trunk ^/branches/tempbranch
$ svn switch ^/branches/tempbranch
$ svn commit -m "Stashed"
$ svn switch ^/trunk
$ ... hack away in trunk ...
$ svn commit -m "..."
$ svn merge ^/branches/tempbranch .
$ svn rm ^/branches/tempbranch
$ ... continue hacking

যদি নিয়মিতভাবে করা হয় তবে এটি (এবং সম্ভবত হওয়া উচিত) কোনও স্ক্রিপ্টে রাখা যেতে পারে।


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

5
রেপো রুটের জন্য ^ সিনট্যাক্সের দুর্দান্ত ব্যবহার sv যখন আপনার রেপোতে শীর্ষ স্তরের ট্রাঙ্ক / ট্যাগ / শাখা থাকে তখন ভাল সমাধান।
বেন্ডিন

4
আমি সার্ভারে এই সমস্ত অস্থায়ী শাখা স্থাপন করা পছন্দ করি না। আমি মনে করি এটি স্থানীয়ভাবে করা উচিত, সার্ভারের বিশৃঙ্খলার পরিবর্তে (এবং স্পিরিও চেকিন ইমেল তৈরি করা, যদি আপনি চেকিনে মেল তৈরি করেন) gene তবুও, মনে রাখার মতো একটি বিকল্প।
sleske

3
@ সেলসেক: হ্যাঁ, আপনি সার্ভারের সাথে অস্থায়ীভাবে স্ট্যাশ প্রতিশ্রুতি দিচ্ছেন, তবে শাখাটি নিজেই মুছে ফেলা হয়েছে। যাইহোক, আমি মনে করি এটি এটি করার সবচেয়ে দ্রুত এবং সবচেয়ে শক্তিশালী উপায়।
জেস্পের ই

5
@ সালস্কে: এসভিএন কোনও বিতরণ করা ভিসিএস নয়, তাই সার্ভারে সবকিছুই থাকা উচিত। ঠিক এটিই।
এসবিআই

24

1.10.0 (2018-04-13) হিসাবে আপনার পরীক্ষামূলক svn shelveকমান্ড রয়েছে । ( কচ্ছপ এসভিএন কমান্ডটি সমর্থন করে ) এটি কোনও প্যাচ সংরক্ষণ এবং পুনরায় প্রয়োগ করা সহায়ক ছাড়া আর কিছুই নয়, সুতরাং এটির svn diff+ এর সমান সীমাবদ্ধতা রয়েছে patch(যেমন বাইনারি ফাইল এবং নাম পরিবর্তন করতে পারে না)। ( সম্পাদনা করুন : বাইনারি সমর্থন পরবর্তী সংস্করণে আসছে বলে মনে হচ্ছে 1.11.0 )

সম্পাদনা ^ 2: সঙ্গে 1.11.0 (2018-10-30 মুক্তি), বাইনারি ফাইল হয় সমর্থিত । শেলভিং নামকরণ করা ফাইলগুলি অসমর্থিত থেকে যায়। 1.11 এ শেলভিং 1.10 দ্বারা নির্মিত তাকের সাথে বেমানান।

^ 3 সম্পাদনা করুন: 1.12.0 দিয়ে (2019-04-24 প্রকাশিত), অনুলিপি করা এবং পুনর্নবীকরণ সমর্থিত । 1.12 এ শেলভিং পূর্ববর্তী সংস্করণগুলি দ্বারা নির্মিত তাকগুলির সাথে সামঞ্জস্য নয়।

^ 4 সম্পাদনা করুন: 1.13.0 এবং 1.14.0 এর সাথে তাকের চারপাশে কোনও পরিবর্তন নেই । কমান্ডগুলি এখনও পরীক্ষামূলক হিসাবে চিহ্নিত হয়েছে এবং SVN_EXPERIMENTAL_COMMANDS=shelf3বৈশিষ্ট্যটি সক্ষম করতে আপনাকে সংজ্ঞায়িত করতে হবে। দেখে মনে হচ্ছে ফিচারটি বর্তমানে অপরিশোধিত

ডিজাইন নোটগুলি বিকাশকারীদের উইকিতে পাওয়া যাবে ।

$ svn x-shelve --help
x-shelve: Move local changes onto a shelf.
usage: x-shelve [--keep-local] SHELF [PATH...]

  Save the local changes in the given PATHs to a new or existing SHELF.
  Revert those changes from the WC unless '--keep-local' is given.
  The shelf's log message can be set with -m, -F, etc.

  'svn shelve --keep-local' is the same as 'svn shelf-save'.

  The kinds of change you can shelve are committable changes to files and
  properties, except the following kinds which are not yet supported:
     * copies and moves
     * mkdir and rmdir
  Uncommittable states such as conflicts, unversioned and missing cannot
  be shelved.

  To bring back shelved changes, use 'svn unshelve SHELF'.

  Shelves are currently stored under <WC>/.svn/experimental/shelves/ .
  (In Subversion 1.10, shelves were stored under <WC>/.svn/shelves/ as
  patch files. To recover a shelf created by 1.10, either use a 1.10
  client to find and unshelve it, or find the patch file and use any
  1.10 or later 'svn patch' to apply it.)

  The shelving feature is EXPERIMENTAL. This command is likely to change
  in the next release, and there is no promise of backward compatibility.

Valid options:
  -q [--quiet]             : print nothing, or only summary information
  --dry-run                : try operation but make no changes
  --keep-local             : keep path in working copy

(...)

$ svn x-unshelve --help
x-unshelve: Copy shelved changes back into the WC.
usage: x-unshelve [--drop] [SHELF [VERSION]]

  Apply the changes stored in SHELF to the working copy.
  SHELF defaults to the newest shelf.

  Apply the newest version of the shelf, by default. If VERSION is
  specified, apply that version and discard all versions newer than that.
  In any case, retain the unshelved version and versions older than that
  (unless --drop is specified).

  With --drop, delete the entire shelf (like 'svn shelf-drop') after
  successfully unshelving with no conflicts.

  The working files involved should be in a clean, unmodified state
  before using this command. To roll back to an older version of the
  shelf, first ensure any current working changes are removed, such as
  by shelving or reverting them, and then unshelve the desired version.

  Unshelve normally refuses to apply any changes if any path involved is
  already modified (or has any other abnormal status) in the WC. With
  --force, it does not check and may error out and/or produce partial or
  unexpected results.

  The shelving feature is EXPERIMENTAL. This command is likely to change
  in the next release, and there is no promise of backward compatibility.

Valid options:
  --drop                   : drop shelf after successful unshelve
(...)

$ svn help | grep x-
 x-shelf-diff
 x-shelf-drop
 x-shelf-list (x-shelves)
 x-shelf-list-by-paths
 x-shelf-log
 x-shelf-save
 x-shelve
 x-unshelve

9

আমি কেবল এসএনএন দিয়ে এটি করার সহজ উপায় জানি না। সত্যি বলতে, আমি git-svnএকটি গিট রেপো তৈরি করার পরামর্শ দিচ্ছি যা একটি এসএনএন ওয়ার্কিং অনুলিপি হিসাবে কাজ করে এবং কেবল এটি ব্যবহার করে git stash। কেবল git pullসাথে git svn rebaseএবং git pushসাথে প্রতিস্থাপন করুন git svn dcommitএবং আপনি আপনার গিট ওয়ার্কফ্লো 90% রাখতে পারেন এবং এখনও একটি এসএনএন সার্ভারের সাথে কথা বলছেন।


তবে উপরের মন্তব্যে আমি লিঙ্কটি স্ট্যাকওভারফ্লো.com/ প্রশ্নগুলি / 1554278/ … উল্লেখ করেছি কেবলমাত্র এসএনএন-তে স্ট্যাশ করার জন্য ব্যবহারিক সমাধানের প্রস্তাব দেয়।
ভোনসি

যথেষ্ট ফর্সা; প্রকৃতপক্ষে, গুগল আমাকে এখনই একটি ব্লগে সেই সমাধানে নিয়ে গেছে। আমি এখনও তা বজায় রেখেছি, এই প্রশ্নকারীর জন্য গিট-এসএনএন একটি প্রাকৃতিক সমাধান।
ওয়াল্টার মুন্ড

আমি সন্দেহ করি যে সমাধানটি ফাইলের নামগুলি অনুসরণ করে, যেহেতু গিটটি দেয় না।
NO_NAME

4

svn-stashজিপিএল 3: https://github.com/frankcortes/svn-stash এর আওতায় উপলব্ধ একটি ছোট পাইথন 2 স্ক্রিপ্ট রয়েছে ।

এটি svn diff/patchউল্লিখিত সমাধানগুলির মতো কাজ করে এবং কিছু স্থানীয় ডিরেক্টরিতে পৃথক হিসাবে পরিবর্তনগুলি ধাক্কা দেওয়া এবং পপিংয়ের প্রস্তাব দেয়। দুর্ভাগ্যক্রমে, স্ট্যাশগুলির নাম দেওয়া যায় না, এবং কেবল সর্বশেষটি পপ করা যায় (ভাল, হ্যাঁ, এটি একটি স্ট্যাক, তবে এই জাতীয় সীমাবদ্ধতার কোনও সত্য কারণ নেই)) তবে তারপরে, আপনি সর্বদা নিখোঁজ বৈশিষ্ট্যগুলি তৈরি করতে পারতেন সূত্র.

এটি * ix এর জন্য লেখা, তবে এর সাথে প্রতি "/" প্রতিস্থাপনের পরে os.sepউইন্ডোজের অধীনেও দুর্দান্তভাবে কাজ করে।

আপনি যদি এসএনএন ১. or বা তার বেশি ব্যবহার করেন তবে আপনাকে পরিবর্তন করতে হবে is_a_current_stash(): লাইনটি সরিয়ে ফেলুন if ".svn" in os.listdir(CURRENT_DIR):, যেহেতু 1.7 ডব্লিউসি-তে কেবলমাত্র একটি শীর্ষ-স্তর .svn সাবডির রয়েছে।


উইন্ডোসের নিচে এটি আমার পক্ষে নয়! :(
আন্তোনিও পেট্রিক্কা

4

আপনি এটি সহজেই ইন্টেলিজ আইডিইএ - শেলভ পরিবর্তনগুলি ব্যবহার করে করতে পারেন


এই উপায় কি পরিচালনা করতে পারে metadata changesএবং directory creates/deletes? ঠিক কি পছন্দ git stashকরে?
wonsuc

3

অন্য বিকল্পটি হ'ল আপনার বর্তমান চেকআউটটি একটি নতুন ডিরেক্টরিতে অনুলিপি করা এবং আপনার সমস্ত পরিবর্তনগুলি ফিরিয়ে নেওয়া। এইভাবে আপনি আপনার সার্ভারে একটি অস্থায়ী শাখা তৈরির ঝামেলা বাঁচাতে পারবেন - সমস্ত স্ট্যাশিং একটি স্থানীয় ক্রিয়াকলাপ, যা প্রত্যেকেরই দেখা উচিত নয় এবং প্রায়শই করা যায়।

আপনার হটফিক্স প্রতিশ্রুতি দেওয়ার পরে আপনি আপনার মূল কার্যকরী অনুলিপি আপডেট করতে পারেন এবং আপনার "স্ট্যাশিং এরিয়া" মুছতে পারেন


দ্রষ্টব্য: এটি মূলত দ্বিতীয় ওয়ার্কিং কপিটি পরীক্ষা করার মতোই - কেবলমাত্র চেকআউট ছাড়াই :-)।
sleske

6
@ স্লেসকে: হ্যাঁ, নতুন চেকআউটের জন্য বিপুল পরিমাণ ব্যান্ডউইথের প্রয়োজন ছাড়াই
নিটল

এটি পছন্দ করুন বা না করুন, এটিই উত্তর যা "গিট স্ট্যাশ" আচরণকে আরও ঘনিষ্ঠভাবে আয়না করে। একটি শাখা তৈরি করা দুর্দান্ত, তবে এটি টিএফএসের তাকের সাথে সম্পর্কিত।
চার্লস রবার্তো কানাটো

1

আমি এই বৈশিষ্ট্যটিও চেয়েছি। আমি বর্তমানে কচ্ছপ এসভিএন ব্যবহার করি।

আমি গাছটি রফতানি করা, পুনরায় সংগ্রহস্থলটিতে ফিরে আমার পরিবর্তন এবং প্রতিশ্রুতি ব্যতীত কোনও হার্ড সমাধান খুঁজে পাইনি, তারপরে রফতানি করা গাছ থেকে পরিবর্তনগুলি তুলনা করার মতো একটি সরঞ্জাম ব্যবহার করে আমার উত্স নিয়ন্ত্রিত ডিরেক্টরিতে ফিরে তুলনা করুন।

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


1

আমি সর্বদা দ্বিতীয় চেকআউট রাখি, যাকে আমি "ট্রাঙ্ক_ক্লান" বলি। যখনই আমি যা করছি তার সাথে সম্পর্কিত একটি দ্রুত, বিচ্ছিন্ন পরিবর্তন করার দরকার আছে, আমি কেবল পরিবর্তে সেই চেকআউটে প্রতিশ্রুতিবদ্ধ।


0

উপরের শাখা এবং প্যাচিং ধারণাগুলি দুর্দান্ত তবে তারা আমার পক্ষে ভাল কাজ করে না work আমি একটি ভিজ্যুয়াল ডিফ সরঞ্জাম ব্যবহার করি, তাই চলমান git diffপাঠ্য-ভিত্তিক প্যাচগুলি উত্পাদন করে না। আমাদের বিল্ড সিস্টেমটি যখনই একটি শাখা তৈরি করা হয় তখন একটি নতুন পরিবেশ ছড়িয়ে দেয়, তাই অস্থায়ী "স্ট্যাশ" শাখা তৈরি করা অগোছালো হয়ে যায়।

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


0

ওয়াল্টারের উত্তরের ভিত্তিতে আমি আমার বাশার্ক ফাইলটিতে নিম্নলিখিত উপাত্তগুলি তৈরি করেছি:

alias svn.stash='read -p "saving local changes in raq.patch. Existing stash in raq.patch will be overwritten. Continue?[y/N]" && [[ $REPLY =~ ^[yY] ]] && rm -f raq.patch && svn diff > raq.patch && svn revert -R .'
alias svn.stash.apply='patch -p0 < raq.patch; rm -f raq.patch'

এই এলিয়াসগুলি ব্যবহার করা এবং মনে রাখা খুব সহজ।

ব্যবহার:

svn.stashস্ট্যাশ পরিবর্তনগুলিতে এবং স্ট্যাশ প্রয়োগের জন্য svn.stash.apply


0

আমার অনুশীলনে, আমি আমার সাবভার্সন সংগ্রহস্থলের ডিরেক্টরিতে git initএকটি গিট সংগ্রহস্থল তৈরি করতে ব্যবহার করি trunkএবং তারপরে আমি যুক্ত করি*.git সুকশনগুলি উপেক্ষা করার ধরণগুলিতে ।

কিছু ফাইল সংশোধন করার পরে, যদি আমি সাবভারশন মুখ্যরেখার সাথে আমার কাজ চালিয়ে যেতে চাই তবে আমি কেবল git stashআমার কাজকে স্ট্যাশ করতে ব্যবহার করি। সাবভার্সন সংগ্রহস্থলে প্রতিশ্রুতিবদ্ধ হওয়ার পরে, আমি git stash popআমার পরিবর্তনগুলি পুনরুদ্ধার করতে ব্যবহার করি।


2
এটি আসলে একটি ভাল সমাধান! অন্যান্য অনেকগুলি সমাধান সমস্যা সমাধানের জন্য 3 য় পক্ষের সরঞ্জামগুলি ব্যবহার করে; এইটি গিটকে তৃতীয় পক্ষের সরঞ্জাম হিসাবে ব্যবহার করে। এর বিভিন্ন সুবিধা রয়েছে: 1) গিট খুব সাধারণ এবং শক্তিশালী। 2) অনেক লোক ইতিমধ্যে গিট ইনস্টল করেছেন।
লিই

আমি কৌতূহল করছি আপনি যদি গিট কমিট না করেন তবে এটি কীভাবে কাজ করে।
বি

0

ব্যবহার করুন:

svn cp --parents . ^/trash-stash/my-stash

এটি বর্তমান অবস্থান এবং বর্তমান সংশোধন থেকে একটি শাখা তৈরি করবে এবং তারপরে এটি শাখাটিতে স্যুইচ না করে কাজের কপির পরিবর্তনের প্রতিশ্রুতি দেবে।

ব্যবহার: অনুলিপি এসআরসি [@ আরইভি] ... ডিএসটি

এসআরসি এবং ডিএসটি প্রতিটি হয় একটি ওয়ার্কিং কপি (ডাব্লুসি) পথ বা URL হতে পারে:

WC  -> URL:  immediately commit a copy of WC to URL

নোট করুন যে কার্যকরী অনুলিপি পরিবর্তনগুলি স্বয়ংক্রিয়ভাবে ফিরে আসবে না ( cpকেবল নতুন শাখায় পরিবর্তনগুলি চাপিয়ে দেওয়া হয় ) এবং আপনাকে সেগুলি ম্যানুয়ালি ফিরিয়ে দিতে হবে।

পরিবর্তনগুলি পুনরুদ্ধার করতে, আপনি কেবল নতুন তৈরি করা শাখা থেকে পরিবর্তনগুলি আপনার কার্যকরী কপির সাথে একত্রীকরণ করতে পারেন।

svn merge --ignore-ancestry ^/trash-stash/my-stash -c <commited revision>

--ignore-ancestry কাজের অনুলিপিতে মার্জ তথ্য আপডেট না করার জন্য ব্যবহৃত হয়।

ব্যবহার করুন:

svn ls -v ^/trash-stash/

লুকোচুরি পথে আপনার কী আছে তা দেখতে। প্রতিশ্রুতিবদ্ধ সংশোধনগুলিও মুদ্রিত হয়।

আপনার যদি আর স্ট্যাশ দরকার না হয়, কেবল চালান:

svn rm ^/trash-stash/my-stash

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


-1

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

স্থান Developmentএবং Production(release)একটি পৃথক পথে প্রকল্প।

source\code\MyApp         -- Development
release\MyApp(release)    -- Production(release)

আপনি আপনার প্রকল্পের জন্য যে কোনও নতুন বৈশিষ্ট্য বিকাশের পথে কাজ করতে পারবেন
এবং আপনি কেবল অর্থবহ অগ্রগতি করবেন বা স্থিতিশীলের জন্য কিছু প্রকাশ করা উচিত।

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

আমি জানি এটি সামান্য বিড়ম্বনা সৃষ্টি করে, তবে মুক্তি অগ্রগতি প্রায়শই ঘটে না (এটি আমার পক্ষে হয় না, তবে আমি জানি কিছু প্রকল্পগুলি করে) অগ্রগতি বিকাশের সাথে তুলনা করুন, এই উপায়টি আমার জন্য ফিট করে।

প্রকল্পের সদস্যরা এটি ব্যবহার করার কারণে আমি নির্দিষ্ট প্রকল্পগুলির জন্য এসএনএন ব্যবহার করছি, সুতরাং আমাকে অনুসরণ করতে হবে।
সর্বোত্তম সমাধানটি হ'ল ব্যবহার করা gitযা একটি নিখুঁত সংস্করণ নিয়ন্ত্রণ সিস্টেম এবং এর চেয়ে ভাল svn


আপনি কী করছেন (এটি আপনি যে ডিরেক্টরিগুলি উল্লেখ করেছেন তাতে কোন সংস্করণটি চেক আউট করা হয়েছে?) এটি পুরোপুরি পরিষ্কার নয় তবে এটি শীর্ষ-ভোট প্রাপ্ত উত্তরের সদৃশ ("একটি নতুন কার্যকরী অনুলিপিটি দেখুন") বলে মনে হচ্ছে।
sleske

@ সালস্ক দুঃখিত, আমি আপনার মামলার বিবরণ পড়িনি। আমার ক্ষেত্রে, আমার কেবল প্রয়োজন devএবং prod2 পরিস্থিতি। সম্পূর্ণ নতুন কার্যকারিতা বিকাশ করা এসএনএন এর সাথে জটিল হবে। আমি নিশ্চিত নই যে এসএনএন বিশ্বে আপনার মামলা সমাধানের জন্য সুস্পষ্ট পদ্ধতি আছে কিনা।
wonsuc
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.