سؤال

أنا أفهم المفهوم الأساسي لفرع ودمج. جميع التفسيرات التي وجدتها تحدث عن المتفرعة جذعك بأكمله لإنشاء مشروع فرع ويعمل عليه ومن ثم دمجه. هل من الممكن تفرد مجموعة فرعية من المشروع؟

أعتقد أن مثال سيساعدني في شرح أفضل ما أريد القيام به. افترض أن لدي تطبيق مع عشرة ملفات file0 من خلال file10. جميع الملفات مترابطة وأن تكون قادرا على اختبار أي ملف واحد يجب تضمين جميع الآخرين في الإنشاء. أريد أن أعمل على File0 ولكن لا أحتاج إلى إجراء تغييرات على File1 من خلال File10. هل يمكنني فرع File0 لذا فإن التغييرات الملتزمة ب FILE0 ستقوم بتحديث شيء مثل MyRepos / Branches / A-Branch / File0 ولكن جميع الملفات الأخرى في نسختي العملية ستكون ببساطة من الجذع؟

السبب في أنني أرغب في القيام بذلك هو أنني أعمل على تطبيق J2ee ضخم مع عشرات الآلاف من الملفات ويبدو أنه يبدو أن التفرع كل شيء سوف يستغرق وقتا طويلا حقا. أيضا، أنا أستخدم الكسوف مع Subclipse (ويمكن أن أكون مخطئا في هذا) ولكن يبدو أنه إذا قمت بفرع مشروع في الكسوف ثم سأضطر إلى إعداد مشروع Eclipse جديد للإشارة إلى الفرع. لسوء الحظ استيراد هذا المشروع المعين من SVN إلى الكسوف يستغرق عدة ساعات بسبب حجم التطبيق. انها ليست واقعية بالنسبة لي لقضاء هذا الكثير من الوقت.

أفترض أنني يمكن أن يكون لديك مفاهيم خطأ. ربما يتطلب المتفرع مشروع كامل نسخة عمل جديدة على الإطلاق؟

شكرا لأي ضوء يلقي في هذه المسألة.

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

المحلول

المتفرعة بالكامل (حتى) شجرة كبيرة جدا في التخريب عملية رخيصة جدا, ، والتي تقوم بنسخ الملفات كسول (O (1) الوقت).

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

نصائح أخرى

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

هل يمكنني فرع File0 لذا فإن التغييرات الملتزمة ب FILE0 ستقوم بتحديث شيء مثل MyRepos / Branches / A-Branch / File0 ولكن جميع الملفات الأخرى في نسختي العملية ستكون ببساطة من الجذع؟

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

بهذه الطريقة، سيكون لديك دائما أحدث المعلومات من trunk, والتي سوف تتيح لك اختبار file0 التغييرات بشكل مستقل عن الجذع. ثم يمكنك استخدام svn switch لتحريك "عدسة الملفات" بين الجذع والفرع (ولكن حذار، قد يشكو الكسوف من شمننيغانغ).

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

كما ذكر في السؤال "كيف يمكنني فرع ملف فردي في SVN؟"، يمكنك فرع مجموعة فرعية، لكنني أعتقد أن هذا سيكون خطيرا مع SVN: آلية خصائص Merginfo: يعمل بشكل أفضل من تعيين الممتلكات من جذر المشروع.

المتفرعة في SVN هو عملية O (1). أيضا، كما تستخدم SVN داخليا النسخ الكسول، فأنت تدفع فقط عقوبة فضائية لما تتغير.

لذلك إذا كنت غير متأكد، فلماذا لا تتقدم وتفرع المشروع بأكمله؟

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

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