هل يمكن لعميل Subversion (SVN) الروابط الرمزية derefence كما لو كانت ملفات؟

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

  •  21-09-2019
  •  | 
  •  

سؤال

لديّ دليل على نظام Linux يحتوي في الغالب على Symlinks للملفات على نظام ملفات مختلف. أرغب في إضافة الدليل إلى مستودع تخريب ، وإلغاء ارتباطات الارتباطات في هذه العملية (معاملةهم كملفات يشيرون إليها ، بدلاً من الروابط). عمومًا ، أود أن أكون قادرًا على التعامل مع أي عمليات طباعة العمل مع هذا السلوك ، ولكن الأمر "SVN Add" هو المكان الذي يبدأ فيه ، على ما أعتقد.

لا يبدو أن أداة SVN Client Utility لديها أي خيارات تتعلق بإلغاء Dereferencing في نسخة العمل. لم أجد أي إشارات إلى هذا في الدليل (http://svnbook.red-bean.com/en/1.5/index.html)، أيضاً.

لقد وجدت ملصقًا على قائمة إرسال مستخدمي SVN التي طرحت نفس السؤال ولكن لم تتلق إجابة ، هنا:

(انتهى هذا الملصق باستخدام الروابط الصلبة بدلاً من Symlinks. هذه التقنية ليست خيارًا ، في حالتي ، لأن الملفات الأساسية الحقيقية الموجودة على نظام ملفات منفصل.)

أنا أستخدم Subversion v1.6.1 على Fedora 11.

لما يستحق الأمر ، أعرف أن هناك أدوات/تقنيات بديلة يمكن أن تساعد في تقارب هذا السلوك ، ولكن يجب أن أتجاهلها لأسباب مختلفة. لقد فكرت بالفعل في [ومربته الغبار] هذه الاحتمالات:-جبل "الاتحاد" ، دمج جميع الدلائل التي تحتوي على الملفات الحقيقية ، مع دليل طباعة العمل SVN كطبقة "أعلى" في الاتحاد ؛ - نسخ/نقل الملفات الحقيقية إلى نفس نظام الملفات مثل طباعة العمل SVN ، واستخدام الروابط الصلبة بدلاً من الارتباطات ؛ - أنظمة التحكم في الإصدار غير SVN. كانت كل هذه أفكارًا أنيقة ، وأنا متأكد من أنها حلول جيدة لمشاكل أخرى ، لكنها لن تعمل بالنظر إلى قيود هذه البيئة والوضع.

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

المحلول

لديك الكثير من القيود ولكن هناك شيء واحد يعمل دائمًا: اختراق المصدر.

يمكنك بسهولة إنشاء SVN الخاص بك لـ Linux ، على الرغم من أن جعل هذا التعديل قد يكون "سهلاً". على أي حال ، إذا لم يكن لديك أي روابط رمزية مُدارة ، فيمكنك اتخاذ اختراق خام ومتابعة SVN دائمًا ، كما لو كانت روابط صعبة.

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

قد يكون هناك خيار آخر: ظهرت روابط مصنوعة من الإصدار في 1.1.0 ، إذا كان السلوك قبل ذلك هو اتباع الروابط الرمزية ، فربما يمكنك فقط تشغيل عميل قديم.

نصائح أخرى

IDEA: حقن مكتبة مشتركة باستخدام LD_PRELOAD التي تعترض STAT/OPEN/UNLING ETC بحيث لا ترى SVN عمليات الارتباط. هذا من شأنه أن يوفر لك من الاضطرار إلى تعديل مصدر SVN.

يمكنك أيضًا استخدام الروابط المادية بدلاً من الروابط الرمزية.

على حد علمي ، مع إصدار التخريب الحالي (1.6.x) لا توجد طريقة للقيام بذلك. إذا كان الأمر يتعلق بالملفات (وليس الدلائل) على نفس نظام الملفات ، لكان قد تستخدم الروابط الصلبة (مع -s التبديل في ln يأمر).

واجهت تحديًا مشابهًا. يحتوي الدليل المنزلي على العديد من البرامج النصية في ~/scripts منتشرة حول مختلف المخرجين. ومع ذلك ، أردت تخطيطًا أنظف في SVN لصالح زملاء العمل الذين يبحثون عن الأشياء التي تبحث عن أمثلة رمز.

لقد خلقت أ ~/scripts/svn/signal15/code/ دليل مع prod و test المخرج الفرعي تحتها ، ثم مرتبط بجد جميع البرامج النصية المنتشرة في مكان آخر.

ثم قام الأمر التالي باستيراد تخطيط الدليل/الملف الذي احتاجه ؛

cd ~/scripts ; svn import svn http://svn_server/repos/code

يظهر الريبو الآن http://svn_server/repos/code/signal15/ مع "Prod" و "Test" الفرعي.

لدي الآن تخطيطات مخصصة. أ) لا يزال تخطيط دليل منزلي دون تغيير (بلا ~/scripts/svn الدليل الفرعي) ب) يحتوي مستودع SVN على فرع "Signal15" مع البرامج النصية المنظمة الخاصة بي. ملاحظة: مع وظيفة shell ، يمكنني تسجيل الوصول والاطلاع حسب الحاجة أيضًا.

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