كيف يمكنني نقل مجلد واحد من التخريب مستودع إلى مستودع آخر?

StackOverflow https://stackoverflow.com/questions/417726

سؤال

لدي "المستندات" المجلد في التخريب مستودع اسمه "المشروع".لقد جئت إلى استنتاج مفاده أنه ينبغي حقا أن تبقى في إطار منفصل التخريب مستودع اسمه "project_docs".

أود أن نقل "المستندات" المجلد (وجميع المراجعات) إلى "project_docs" مستودع.هل هناك طريقة لعمل هذا ؟

هل كانت مفيدة؟

المحلول

إذا كان لديك الوصول إلى مستودع نفسها (وليس نسخة عمل), يجب أن تكون قادرة على تفريغ الحالي مستودع, فلتر فقط تتضمن معلومات حول المجلد المستندات ، وتحميله إلى مستودع.

سيكون شيئا مثل هذا:

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

دون الوصول إلى مستودع لا يمكنك الحفاظ على مراجعة التاريخ و لديك لتسوية نسخ الملفات في مستودع وارتكاب.

نصائح أخرى

svndumpfilter لديه عيب خطير - إذا كان الملف أو المسار تم نسخها من طريق أنت تصفية أحد أنت تصفية ، svndumpfilter لن تكون قادرة على ملء تاريخ العمل سوف تفشل.

يمكنك استخدام svndumpfilter2 إذا كنت تواجه هذه المشكلة.

هذا هو مناقشتها في إس في الوثائق.تحقق من مستودع الصيانة قسم svndumpfilter...على وجه التحديد توضح كيفية تفريغ المشاريع من المستودع المركزي ونقلها إلى جديد مستقل مستودعات.

لا أعتقد يمكنك أن تفعل ذلك عن بعد (أي دون نسخة محلية).ولكن هذا يجب أن تعمل: svn export المجلد من الملقم الأصلي ، ثم svn add الجديد الخاص بك الريبو.

مثل:

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

تحرير:د تبا, هذا يسقط التاريخ.استخدام svnadmin كما صموئيل يصف.

للرجوع إليها في المستقبل:

إس الوثائق بوضوح التقارير:

إذا كنت لا تخطط يدويا تحرير ملف تفريغ لإزالة أعلى مستوى الدليل ، تأكد من أن المحرر لم يتم تعيين تلقائيا تحويل نهاية خط حرفا إلى تنسيق أصلي (على سبيل المثال ، ), حيث المحتوى ثم لا أتفق مع البيانات الوصفية.وهذا يجعل ملف تفريغ غير مجدية.

استخدام sed أو همة إلى استبدال أعلى مستوى الدليل ، ولكن هذا اسم الدليل يتضمن أيضا داخل ملف المشروع!!!!هذا يسبب إس تحميل المجموع الاختباري خطأ.

لذلك عند إجراء هذه العملية, لا تفعل سلسلة التبديلات مع sed فقط اسم المسار.

بديل "عقدة المسار:old_path" مع "عقدة المسار:new_path".انظر إس كتاب الفصل 5 "إدارة مستودع" لمزيد من التفاصيل.

حاولت استخدام الجواب المقبول ، ولكن كان لدي مستودع ضخم و أردت أن تصدير صغيرة الدليل ، و لم أستطع تحمل تفريغ كامل المستودع.

لذلك أنا فقط تصدير التنقيحات أين الدليل تغيرت (هذا قد لا تعمل إذا كان الدليل الذي تريد تصدير الإشارات إلى أماكن أخرى في الريبو).

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 (URL_to_docs) الموقع في خادم (/svn/old_repo) و الطريق إلى مستندات مستودع (path/to/docs)

يمكنك بسهولة تحرير الخاص بك docs_only.dump إذا كنت ترغب في تغيير الموقع الخاص بك دكتور الدليل في مستودع.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top