سؤال

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

ما هي أفضل طريقة لتقليل وقت التحديث وزيادة سرعة SVN؟

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

المحلول

إذا كان مستودع SVN قديمًا (أو حتى جديدًا تمامًا، ولكن لم يتم إعداده على النحو الأمثل)، فربما يستخدم نمط BDB الأقدم لقاعدة بيانات المستودع. http://svn.apache.org/repos/asf/subversion/trunk/notes/fsfs لديه ملاحظات على الجديد.التغيير من واحد إلى آخر ليس بالأمر الصعب - قم بتفريغ السجل بأكمله، وأعد تهيئته بتنسيق svn الجديد لنظام الملفات وأعد الاستيراد.قد يكون من المفيد أيضًا في نفس الوقت تصفية تفريغ الريبو لإزالة عمليات تسجيل الوصول الكاملة للمعلومات غير المفيدة (لقد قمت، على سبيل المثال، بإزالة 20 ميجابايت + من ملفات tarball التي قام شخص ما بتسجيل الوصول إليها).

بقدر ما يتعلق الأمر بالسرعة العامة - سيكون من الصعب لوم محرك الأقراص الثابتة عالي الجودة (السريع) والذاكرة الإضافية للتخزين المؤقت المستند إلى نظام التشغيل من حيث زيادة سرعة كيفية عمل SVN.

من جانب العميل، إذا كان لديك إعداد tortoisesvn من خلال PuttyAgent لوصول SSH إلى جهاز مستودع خارجي، فيمكنك أيضًا تمكين ضغط SSH، والذي يمكن أن يساعد أيضًا.

يحرر: يحتوي SVN v1.5 أيضًا على fsfs-reshard.py أداة يمكن أن تساعد في تقسيم مستودع svn المستند إلى FSFS إلى عدد من الدلائل - والتي يمكن ربطها بنفسها بمغازل محرك أقراص مختلفة.إذا كان لديك الآلاف من المراجعات، فقد يساعد ذلك أيضًا - إذا لم يكن هناك سبب آخر سوى أن العثور على ملف واحد من بين الآلاف يستغرق وقتًا (وسوف تعرف ما إذا كانت هذه مشكلة من خلال النظر في أوقات IOwait)

نصائح أخرى

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

ليست إجابة حقًا، ولكن قد يكون من المثير للاهتمام معرفة أن أحد أسباب ثقل الإدخال/الإخراج في svn هو حقيقة أنه يخزن نسخة إضافية واحدة من كل ملف في الدليل .svn/text-base.وهذا يجعل عمليات الاختلاف المحلية سريعة، ولكنها تستهلك الكثير من مساحة القرص الصلب والإدخال/الإخراج.

http://subversion.tigris.org/issues/show_bug.cgi?id=525 لديه التفاصيل.

يبدو أن لديك مشاريع متعددة في مستودع واحد.تقسيمها حيثما كان ذلك مناسبًا سيعطيك دفعة كبيرة.

من المفترض أن Git أسرع بكثير من Subversion نظرًا لطريقة تخزين/معالجة التغييرات، لكن ليس لدي خبرة مباشرة في ذلك.

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

هناك بعض تعديلات الأداء الشائعة.SVN ثقيل جدًا في عمليات الإدخال/الإخراج، لذا تعد الأقراص الثابتة الأسرع خيارًا (على كلا الطرفين).أضف المزيد من الذاكرة إلى الخادم الخاص بك.تأكد من أن عملائك لديهم قرص ثابت تم إلغاء تجزئته (لنظام التشغيل Windows).

ما هي طريقة الوصول التي تستخدمها مهمة أيضًا.ستكون المستودعات المخزنة على أنظمة الملفات البعيدة (باستخدام الوصول إلى الملف:///) أبطأ بكثير من svnserve أو Apache مع mod_svn.فكر في استخدام أحد الخيارات الأخيرة إذا كان لديك مستودع لمشاركة ملف بسيط.

ينظر TotoiseSVN بشكل افتراضي إلى تغييرات الملفات في الخلفية وقد رأيت ذلك يؤدي إلى إبطاء جهازي.لقد قمت بتغيير التكوين لاستبعاد كل شيء ثم قم فقط بتضمين الدلائل التي لدي فيها عمليات سحب.يمكنك أيضًا إيقاف تشغيل عمليات التحقق من الخلفية.كلا هذين الإعدادين موجودان في عقدة إعدادات Icon Overlays.

في بعض الأحيان يكون بطء تشغيل svn، خاصة مع العديد من العناصر الخارجية، مرتبطًا بـ DNS.يبدو أن svn يقوم بإجراء بحث DNS لكل svn:external، حتى بالنسبة للمثيلات النسبية.قد يكون من المفيد إضافة اسم مضيف خادم svn إلى /etc/hosts أو إصلاح resolv.conf.

لقد وجدت في تجربتي الخاصة (على سبيل المثال:ليس من خلال أي فِعلي الاختبارات) أنه، خاصة إذا كان خادم SVN repo بعيدًا، يبدو أن استخدام العناصر الخارجية يؤدي إلى إبطاء الأمور.إذا كان لديك تعليمات برمجية مكررة (مثل محرر FCK الخاص بك) في أماكن متعددة، فسأميل إلى الالتزام باستخدام العناصر الخارجية نظرًا لأن الحفاظ على مزامنة هذه الملفات وإدارتها أكثر أهمية من سرعات التحديث - على الرغم من ذلك، يمكنك النظر في استخدام الروابط الرمزية لجلب في رمز مكرر بدلا من ذلك.(إذا كنت تستخدم نظام التشغيل Windows XP، فيمكنك استخدام نقاط التقاطع).

لقد قمنا بتقسيم قاعدة التعليمات البرمجية الخاصة بنا إلى عدة وحدات شقيقة وكتبنا نصوص Ant حتى يتمكن أحد المطورين من العمل على وحدة واحدة في كل مرة دون القلق بشأن ما يحدث في الوحدات الأخرى.

  • يقوم البرنامج النصي للبناء عالي المستوى بتشغيل جميع البرامج النصية الخاصة ببناء الوحدات
  • المكتبات الخارجية هي لا مخزنة في Subversion ولكن يتم سحبها من محرك أقراص الشبكة باستخدام Apache Ivy.(فكر في الأمر وكأنه مستودع Maven داخلي).
  • تتم أيضًا إدارة التبعيات بين الوحدات باستخدام Ivy.

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

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

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

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