سؤال

لست متأكدًا من كيفية تنظيم هذه المشاريع نظرًا لأنها جميعها تعتمد على بعضها البعض.

الآن كل شيء في الهيكل التالي، والذي أصبح من الصعب إدارته

-trunk
 |-bin - compiled common dlls
 |-lib - static libs for use with common dlls
 |-src - common dll source code
 |-include - headers for common dlls
 |-common.sln - VS 2008 solutions for common dlls
 |-samples
 ||-res - resources for samples
 |||-img
 |||-snd
 ||-c++ - c++ samples for common dlls, tends to double up as tests
 |||-various VS 2008 sample solutions
 ||-py - python versions for some samples
 |||-...
 |-wrappers
  |-python
  ||-bin - compiled python extension dll
  ||-src - source for python wrapper
  -Apps - actaul programs using common dlls, each with its own dir and solution
  |-...

وهذا له عدد من المشاكل:-1 هيكل SVN هو مجرد فوضى ، ليس لدي أي طريقة حقيقية لإنشاء bracnh لتطبيق واحد فقط على سبيل المثال -الإصدارات الصنع لأي شيء هو ألم هائل بسبب مسارات الملف التي يستخدمها التطبيق.على سبيل المثال، يحتاج برنامج python إلى معرفة مكان امتداد python dll، وأين يوجد كل ملف من ملفات dll الشائعة.تختلف هذه المسارات كثيرًا على svn عما ستكون عليه بالنسبة للإصدار (حيث تكون جميعها محتملة في دير مشترك)

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

المحلول

يوروغه!

قسّم كل شيء إلى مشاريع/مكتبات/مكتبات/عناصر منفصلة - كل ما تريد الاتصال به واتبع بنية SVN الموصى بها:

/ (root)
  /Application1
    /branch
    /tag
    /trunk
  /Application2
    /branch
    /tag
    /trunk
  /LibraryX
    /branch
    /tag
    /trunk
  /LibraryY
    /branch
    /tag
    /trunk

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

على سبيل المثال، إذا كنت تريد أن يكون ملف dll المترجم من LibraryX موجودًا في مجلد يسمى dll داخل Application1، فستحتاج إلى إضافة الخاصية svn:external التالية في مستودعك على /Application1/ :

svn://repositoryname/LibraryX/buildoutput/ dll

عند الخروج من التطبيق 1، ستحصل على جميع ملفاته بالإضافة إلى أنه سيضيف مجلدًا يسمى dll داخل نسخة العمل الخاصة بك والتي سيتم سحبها من LibraryX/buildoutput/

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

Application1 (checked out from svn://repositoryname/Application1/trunk)
LibraryX (checked out from svn://repositoryname/LibraryX/tag/stable)

لذا، إذا كنت تريد ملفًا محددًا من مخرجات إنشاء LibraryX، فيمكنك إضافة:

svn:externals ../LibraryX/build/thelibfile.dll libfile.dll

..كخاصية لنسخة العمل التي تم سحبها من Application1 وستسحب ملف libfile.dll من LibraryX وتلصقه في جذر دليل عمل Application1 الخاص بك.

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

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

يمكنك فقط إحضار الملفات الخارجية ذات الملف الواحد باستخدام إصدار التخريب 1.6.x

نصائح أخرى

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

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

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

  1. تطبيقات
  2. شائع
  3. عينات (ربما؟!)
  4. مغلفة

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

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