يجب علي دمج والالتزام في كل مرة أقوم بتحديث فرع Mercurial الخاص بي على خادم الإنتاج؟

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

  •  11-09-2019
  •  | 
  •  

سؤال

أنا أستخدم mercurial في مشروع حديثة. على خادم الويب حيث أنا نشر المشروع لدي ملف تكوين مختلف قليلا مع إعدادات الإنتاج. المشكلة هي عندما pull و update, ، كثيرا ما يجب أن merge و commit كذلك.

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

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

المحلول

هذا هو نوع من التعامل مع في هذا السؤال, ، لكنني أعتقد أن سؤالك أفضل في أنه يسعى إلى مزيد من الوضوح.

باختصار: نعم، من الطبيعي. إليك القليل من التنوع:

تبدأ مع هذا في المستودع الرئيسي (حيث يتم تشغيل الصناديق):

main: --[E]--[F]--[G]

ثم استنساخ خادم الإنتاج وإضافة تبديلات، H، التي تقوم بتخصيص النشر. لذلك يبدو أن النشر Repo مثل هذا:

production: --[E]--[F]--[G]--[H]

ثم يحدث المزيد من العمل على الريبو الرئيسي، وإضافة مشكلات، وأنا و J، مما يجعل الريبو الرئيسي يبدو وكأنه:

main: --[E]--[F]--[G]--[I]--[J]

الذي عند سحبه إلى الإنتاج يشبه:

production:  --[E]--[F]--[G]--[I]--[J]
                            \         
                             \-[H]

مع اثنين من رؤوس، التي تندمج للحصول عليها:

production:  --[E]--[F]--[G]--[I]--[J]
                            \         \
                             \-[H]-----[K]

حيث K هو فقط J بالإضافة إلى التغييرات التي فعلتها في الأصل في H.

الآن يحدث المزيد من العمل في الرئيسية، العطاء:

main: --[E]--[F]--[G]--[I]--[J]--[L]--[M]

التي تسحبها في إعطاء الإنتاج:

production:  --[E]--[F]--[G]--[I]--[J]--[L]--[M]
                            \         \
                             \-[H]-----[K]

ثم تندمج والحصول على:

production:  --[E]--[F]--[G]--[I]--[J]--[L]--[M]
                            \         \         \
                             \-[H]-----[K]-------[N]

لذلك في كل مرة تقوم فيها بإحضار تغييرات من Main، فأنت تقوم بدمج واحد، وإنشاء نبذة جديدة (هذه المرة ن).

أعتقد أن هذا جيد، وهو "طبيعي".

ومع ذلك، يمكنك تجنب ذلك باستخدام بعض الإجابات في السؤال الذي ربطته أعلاه و هناك خدعة جديدة يمكنك استخدامها للحفاظ عليها تعديل والآباء H's الأصلي (والمحتوى) بحيث يتحرك دائما إلى نهاية كل ما هو الطرف الجديد.

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

كانت الإجابات الأخرى قوائم انتظار Mercurial. و إن إجراء تغييرات الإنتاج يعيش في Repo Dev ويتم تشغيله بشيء مختلف في بيئة الإنتاج (مثل المضيف: رأس).

نصائح أخرى

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

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

على سبيل المثال، عندما أعمل على تطبيق Django أتحقق من settings.py الملف الذي يحتوي على:

  • جميع الإعدادات التي لن تختلف بين الخوادم (اسم الموقع، وتثبيت تطبيقات Django، إلخ).
  • إعدادات "محددة الخادم" (موقع قاعدة البيانات، إلخ) للتنمية المحلية.
  • الخط from deploy import * في نهايةالمطاف.

ال from deploy import * خط يسحب في جميع العناصر في deploy.py ملف إذا كان أحد موجود. في خادم اختبار / التدريج / الإنتاج، سأقوم بإنشاء هذا الملف ووضع إعدادات الخادم الخاصة بالخادم في الداخل. لأن الاستيراد يحدث في نهاية settings.py هذه سوف تنفذ على أي من الإعدادات المحلية الخاصة بالتنمية في ملف الإعدادات الرئيسية.

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

هذا المخطط الخاص هو مشروع Django، ولكن ربما تعمل فكرة مماثلة بالنسبة لك.

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