আমি কীভাবে একটি একক ফোল্ডারটিকে একটি সাবভার্সন সংগ্রহস্থল থেকে অন্য ভাণ্ডারে স্থানান্তর করতে পারি?


156

আমার কাছে "প্রকল্প" নামে একটি সাবভার্সন সংগ্রহশালায় একটি "ডক্স" ফোল্ডার রয়েছে। আমি এই সিদ্ধান্তে পৌঁছেছি যে এটি "প্রকল্প_ডোকস" নামে একটি পৃথক সাবভার্সন সংগ্রহস্থলের আওতায় রাখা উচিত।

আমি "ডকস" ফোল্ডারটি ( এবং এর সমস্ত সংশোধনী ) "প্রকল্প_ডোক্স" সংগ্রহস্থলে স্থানান্তর করতে চাই । এই কাজ করতে একটি উপায় আছে কি?

উত্তর:


183

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

এরকম কিছু হবে:

svnadmin dump /svn/old_repos > ./repository.dump
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./repository.dump > ./docs_only.dump
svnadmin load /svn/new_repos < ./docs_only.dump

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


1
চমৎকার উদাহরণ। মনে রাখবেন যে আমি যে ডকুমেন্টেশনের সাথে লিঙ্ক করেছি তাতে বলা হয়েছে যে এই সমাধানটি সমস্ত সংশোধনীর পুনরায় নম্বর দেবে যাতে কোনও "শূন্যপদ" না থাকে। আপনি অন্য কোথাও ডক সংশোধনগুলির রেফারেন্স দিলে কিছু মনে রাখবেন।
অ্যাডাম বেলায়ার 19

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

11
উত্তর করার জন্য ধন্যবাদ. যদি কারও জানা প্রয়োজন, আপনার যদি আরও বেশি প্রয়োজন হয় তবে একটি ফোল্ডার কেবল অন্তর্ভুক্ত তালিকার মধ্যে তাদের মধ্যে একটি স্থান রেখে দেয়। যাত্রা। ... দুটি ফোল্ডার ফোল্ডার অন্তর্ভুক্ত করুন দুই
রবিন রবিনসন

6
র‌্যাঙ্কিং সংশোধনগুলি সম্ভবতঃ একটি খারাপ ধারণা, কারণ প্রতিশ্রুতিবদ্ধ বার্তা এবং ইস্যু ট্র্যাকিংয়ের সরঞ্জামগুলি তাদের উল্লেখ করতে পারে
উইম কোয়েন

5
এটি আমার পক্ষে কাজ করেছে। আমি একটি উইন্ডোজ ব্যবহারকারী (ভিজ্যুয়াল এসভিএন সার্ভার) এবং আমার প্রথম কমান্ডটি এটির মতো দেখায়, যদি এটি কাউকে সহায়তা করে:"C:\Program Files (x86)\VisualSVN Server\bin\svnadmin" dump c:\Repositories\MyRepository > c:\Temp\MyReository.dump
ক্রিস

30

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

আপনি যদি এই সমস্যাটি অনুভব করেন তবে আপনি svndumpfilter2 ব্যবহার করতে পারেন ।


4
এখানে svndumpfilter2 এর জন্য আরও উন্নত লিঙ্ক: svn.tartarus.org/sgt/svn-tools/svndumpfilter2
বমউপিন

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

6

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


2

আমি বিশ্বাস করি না আপনি এটি দূরবর্তীভাবে করতে পারবেন (অর্থাত্ স্থানীয় কপি ছাড়াই)। তবে এটি কাজ করা উচিত: svn exportমূল সার্ভার থেকে ফোল্ডার, তারপরে svn addএটি আপনার নতুন রেপোতে।

ভালো লেগেছে:

$ svn checkout svn://example.net/newrepo .
$ svn export svn://example.com/oldrepo/mydir ./mydir
$ svn add ./mydir; svn commit

সম্পাদনা: দোহ, এটি ইতিহাসকে ড্রপ করে। শমূয়েল বর্ণিতsvnadmin হিসাবে ব্যবহার করুন ।


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

2

ভবিষ্যতের রেফারেন্সের জন্য:

এসভিএন ডকুমেন্টেশন পরিষ্কারভাবে রিপোর্ট করেছে:

যদি আপনি কোনও শীর্ষ-স্তরের ডিরেক্টরি সরানোর জন্য ডাম্প ফাইলটিকে ম্যানুয়ালি সম্পাদনা করার পরিকল্পনা করেন তবে নিশ্চিত হয়ে নিন যে আপনার সম্পাদকটি স্বয়ংক্রিয়ভাবে শেষ-অফ-লাইন অক্ষরগুলিকে স্থানীয় ফর্ম্যাটে রূপান্তর করতে সেট করা নেই (যেমন, \ r \ n থেকে \ n), যেহেতু সামগ্রীগুলি তখন মেটাডেটার সাথে একমত হবে না। এটি ডাম্প ফাইলটিকে অকেজো উপস্থাপন করবে।

শীর্ষ স্তরের ডিরেক্টরিটি বিকল্পের জন্য সেড বা ভিম ব্যবহার করুন তবে এই ডিরেক্টরিটির নামটি একটি প্রকল্পের ফাইলের অভ্যন্তরেও অন্তর্ভুক্ত ছিল !!!! এটি একটি এসভিএন লোড চেকসাম ত্রুটির কারণ ঘটায়।

সুতরাং আপনি যখন এই অপারেশনটি করেন, কেবল পথের নামের সাথে স্ট্রিং বিকল্পগুলি করবেন না।

“নোড-পাথ: ওল্ডপথ” এর সাথে "নোড-পাথ: নতুন_পথ" বিকল্প করুন st আরও তথ্যের জন্য এসভিএন বইয়ের অধ্যায় 5 "সংগ্রহস্থল প্রশাসন" দেখুন।


1

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

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

svn log URL_to_docs | awk '/^r/{gsub(/^r/,"",$1);print $1}' > revisions.txt
#tac for revisions in reverse (oldest revision first)
tac revisions.txt | while read line; do svnadmin dump /svn/old_repo -r$line >> ./docs_revisions.dump ; done

#You don't have to filter if you commited only files in your directory docs in your exported revisions
svndumpfilter include path/to/docs --drop-empty-revs --renumber-revs --preserve-revprops < ./docs_revisions.dump > ./docs_only.dump

svnadmin load /svn/new_repos < ./docs_only.dump

আপনাকে অবশ্যই আপনার রেপো ইউআরএল ( URL_to_docs), সার্ভারের অবস্থান ( /svn/old_repo) এবং ডিপোজিস্টরিতে ডক্সের পাথটি প্রতিস্থাপন করতে হবে ( path/to/docs)

আপনি docs_only.dumpযদি আপনার নতুন ভান্ডারে আপনার ডক ডিরেক্টরিটির অবস্থান পরিবর্তন করতে চান তবে সহজেই আপনার সম্পাদনা করতে পারেন ।

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