Friday 23 February 2018

جيت دمج استراتيجية عودية


جيت دمج استراتيجية عودية
آلية دمج (جيت دمج وأوامر سحب جيت) يسمح الخلفية "استراتيجيات دمج" ليتم اختيارها مع الخيار - s. يمكن لبعض الاستراتيجيات أيضا أن تأخذ خياراتها الخاصة، والتي يمكن تمريرها عن طريق إعطاء - X & لوت؛ الخيار & غ؛ الحجج لدمج و / أو سحب جيت.
هذا يمكن حل سوى اثنين من رؤساء (أي الفرع الحالي وفرع آخر كنت سحبت من) باستخدام خوارزمية دمج 3-طريقة. فإنه يحاول كشف بعناية غموض الدمج عبر الصليب ويعتبر آمنة عموما وسريعة.
هذا يمكن حل اثنين فقط من رؤساء باستخدام 3-طريقة دمج الخوارزمية. عندما يكون هناك أكثر من سلف مشترك واحد يمكن استخدامه لدمج ثلاثي الاتجاه، فإنه يقوم بإنشاء شجرة مدمجة من الأجداد المشتركة ويستخدم كشجرة مرجعية لدمج ثلاثي الاتجاه. وقد أفيد أن هذا يؤدي إلى عدد أقل من الصراعات دمج دون التسبب في سوء الفهم عن طريق الاختبارات التي أجريت على دمج الفعلي التي اتخذت من لينكس 2.6 تطور نواة التاريخ. بالإضافة إلى ذلك يمكن الكشف عن والتعامل مع الاندماجات التي تنطوي على إعادة تسمية. هذه هي استراتيجية الدمج الافتراضية عند سحب أو دمج فرع واحد.
يمكن أن تأخذ الاستراتيجية "العودية" الخيارات التالية:
هذا الخيار يجبر الصيادين المتضاربة إلى أن يتم حلها بشكل نظيف من خلال تفضيل "لدينا" الإصدار. التغييرات من الشجرة الأخرى التي لا تتعارض مع جانبنا تنعكس على نتيجة الدمج. للحصول على ملف ثنائي، تؤخذ محتويات كاملة من جانبنا.
لا ينبغي الخلط بين هذا وبين استراتيجية دمجنا، التي لا تنظر حتى إلى ما تحتوي عليه الشجرة الأخرى على الإطلاق. فإنه يتجاهل كل ما فعلت شجرة أخرى، معلنا "لدينا" التاريخ يحتوي على كل ما حدث في ذلك.
هذا هو عكس "لنا". نلاحظ أنه، على عكس 'لنا'، ليس هناك 'هم' دمجها ستراجيغي الخلط بين هذا الخيار دمج مع.
وباستخدام هذا الخيار، يقضي "دمج-عودية" وقتا إضافيا قليلا لتجنب حالات سوء التشويش التي تحدث أحيانا بسبب خطوط مطابقة غير مهمة (على سبيل المثال، الأقواس من الوظائف المميزة). استخدام هذا عندما الفروع التي سيتم دمجها تباعدت بعنف. انظر أيضا جيت-ديف [1] --patience.
يقول "دمج-عودية" لاستخدام خوارزمية فرق مختلفة، والتي يمكن أن تساعد في تجنب سوء ميسمرجيس التي تحدث بسبب خطوط مطابقة غير هامة (مثل الأقواس من وظائف متميزة). انظر أيضا جيت-ديف [1] --diff-ألغوريثم.
إغنور-سباس-تشانج إغنور-آل-سباس إغنور-سباس-أت-يول إغنور-كر-أت-يول.
يعامل خطوط مع النوع المشار إليه من تغيير مساحة بيضاء كما لم تتغير من أجل دمج ثلاثي الاتجاه. لا يتم تجاهل التغييرات ويتسباس مختلطة مع تغييرات أخرى على سطر. انظر أيضا جيت-ديف [1] - b، - w، - ignore-سباس-أت-إيول، و-ignore-كر-أت-يول.
إذا كان 'هم' الإصدار فقط إدخال التغييرات مساحة بيضاء إلى خط، يستخدم 'لدينا' الإصدار؛
إذا أدخلت نسخة "لدينا" تغييرات في مساحة بيضاء ولكن "هم" الإصدار يتضمن تغييرا كبيرا، 'هم' يستخدم الإصدار؛
وإلا فإن عملية الدمج تتم بالطريقة المعتادة.
هذا تشغيل تسجيل الخروج الظاهري وتسجيل الوصول من جميع المراحل الثلاث للملف عند حل دمج ثلاثي الاتجاه. ويهدف هذا الخيار ليتم استخدامها عند دمج الفروع مع مرشحات نظيفة مختلفة أو قواعد التطبيع نهاية الخط. انظر "دمج الفروع مع اختلاف سمات التحقق / الخروج" في جيتاتريبتس [5] للحصول على التفاصيل.
تعطيل الخيار رينورماليز. يؤدي هذا إلى تجاوز متغير التكوين merge. renormalize.
إيقاف الكشف عن إعادة تسمية. انظر أيضا جيت-ديف [1] --no-رينامس.
تشغيل الكشف عن إعادة تسمية، وتحديد اختياريا عتبة التشابه. هذا هو الإعداد الافتراضي. انظر أيضا جيت-ديف [1] --find-رينامس.
مرادف موقوف ل فيند-رينامس = & لوت؛ n & غ؛ .
هذا الخيار هو شكل أكثر تقدما من استراتيجية "الشجرة الفرعية"، حيث تجعل الاستراتيجية تخمين على كيفية تحويل اثنين من الأشجار لتتناسب مع بعضها البعض عند دمج. بدلا من ذلك، هو مسبوق المسار المحدد (أو تجريده من البداية) لجعل شكل اثنين من الأشجار لتتناسب.
هذا يحل الحالات مع أكثر من اثنين من رؤساء، لكنه يرفض أن تفعل دمج معقدة تحتاج إلى قرار يدوي. ومن المفترض في المقام الأول لاستخدامها لتجميع رؤساء فرع الموضوع معا. هذه هي استراتيجية الدمج الافتراضية عند سحب أو دمج أكثر من فرع واحد.
هذا يحل أي عدد من رؤساء، ولكن شجرة الناتجة من الدمج هو دائما أن من رئيس الفرع الحالي، وتجاهل بشكل فعال جميع التغييرات من جميع الفروع الأخرى. ومن المفترض أن تستخدم لتحل محل تاريخ التنمية القديمة من الفروع الجانبية. لاحظ أن هذا يختلف عن الخيار - Xours إلى استراتيجية "عودية" دمج.
هذه هي استراتيجية عودية المعدلة. عند دمج الأشجار A و B، إذا كان B يتوافق مع شجرة فرعية من A، B يتم تعديلها أولا لتتناسب مع هيكل شجرة A، بدلا من قراءة الأشجار على نفس المستوى. يتم هذا التعديل أيضا إلى شجرة الجد المشترك.
مع الاستراتيجيات التي تستخدم دمج 3-الطريقة (بما في ذلك الافتراضي، 'العودية')، إذا تم إجراء تغيير على كلا الفرعين، ولكن عادت في وقت لاحق على أحد الفروع، وهذا التغيير سيكون موجودا في النتيجة المدمجة. بعض الناس يجدون هذا السلوك مربكا. يحدث ذلك لأنه يتم النظر فقط في رؤوس وقاعدة دمج عند تنفيذ دمج، لا يرتكب الفرد. وبالتالي، فإن خوارزمية الدمج تعتبر التغيير الذي تم إرجاعه بدون تغيير على الإطلاق، وتستبدل النسخة التي تم تغييرها بدلا من ذلك.

مدونة البلو.
ماك، نمطية وأكثر.
جيت تلميح الأسبوع: دمج إعادة النظر.
هذا الأسبوع جيت تلميح الأسبوع هو عن الاندماج. يمكنك الاشتراك في الخلاصة إذا كنت ترغب في الحصول على أقساط جديدة تلقائيا.
كنا ننظر سابقا في الاندماج مرة أخرى في نيسان / أبريل، لكننا لمست على المؤشر الأسبوع الماضي، ومؤشر (أو مرحلة) الأرقام، التي تلعب دورا في الاندماجات. هذا الأسبوع، سوف ننظر في ما يعنيه ذلك مع أنواع مختلفة من الاندماجات. إذا كنت لا فاميليار مع الاندماجات، نلقي نظرة على المشاركة السابقة أولا.
دمج يسمح لك لجمع اثنين (أو أكثر) يرتكب في دمج واحد ارتكاب، بينما في نفس الوقت جمع كل من الملفات المختلفة مجتمعة في البلدين. إذا كانت هناك نزاعات دمج، هذه تحتاج إلى حل فردي. ويشار إلى الاندماجات التي يكون فيها أحد الأوامر سلفا للالتزام الحالي باسم عمليات الدمج السريع، ولا يؤدي إلى إنشاء التزام دمج. عند سحب من مصدر بعيد، فإنك تقوم بالفعل بعملية جلب ودمج في خطوة واحدة & نداش؛ على الرغم من عادة، يمكنك فقط سريع إلى الأمام عند القيام به.
لأغراض هذا المنصب، سأنشئ ثلاثة فروع تسمى & لوت؛ أليكس & [رسقوو]؛ & لوت؛ بوب & [رسقوو]؛ و & لوت؛ سيد & [رسقوو]؛، في ولى إلى أليس وبوب. سيكون لكل فرع ملف يسمى مرحبا التي سوف تحتوي على النص & لدكو؛ مرحبا، اسمي أليكس & رديقو؛ (c. f. بوب) وكذلك أليكسفيل، بوبسفيل الخ.
عند إنشاء دمج، لديك خيار القول كيف سيتم معالجة دمج. الاستراتيجية المعتادة هي العودية. وهذا يعني أن جيت سوف يسير كل دليل (شجرة) ومعرفة الملفات التي لها اختلافات مقارنة بتنقيح القاعدة، ثم استخدام واحد مع التغييرات. (إذا كان كلاهما يحتوي على تغييرات، يتم دمج محتويات الملف الجديد نصيا، وإذا كانت هناك مشكلة في ذلك، ينشأ تعارض). لهذا السبب ترى الرسالة & لدكو؛ دمج بواسطة ريكورسيف & رديقو؛ بعد القيام العملية:
ارتكاب d612aa & هيليب؛ هو عقدة دمج في أنه يجلب اثنين من فروع منفصلة معا. وبما أنه لا يوجد سلف من الآخر، فلا يمكن إعادة توجيهها بسرعة، وعلى هذا النحو، يتم إنشاء عقدة الدمج. يمكننا تحديد الوالدين يرتكب مع الرأس ^ 1 والرأس ^ 2:
كما أنه من الأسهل عندما لا يتم دمج أي تغييرات:
سريع إلى الأمام هنا يشير إلى أن سيد وراء بوب، وهكذا يمكننا ببساطة تحريك مؤشر إلى الأمام & نداش؛ ونتيجة لذلك، نحن لسنا بحاجة لإنشاء عقدة دمج.
لذا، هناك إستراتيجيتان يستخدمهما جيت للقيام بعمل سريع أو دمج يتم بواسطة عودية. وهذا يغطي 99٪ من الاندماجات التي ستحتاج إلى القيام بها؛ ولكن تجدر الإشارة إلى أن جيت لديها عدد قليل من الحيل أكثر حتى انها الأكمام التي يمكن أن تساعد في بعض الحالات.
الأمثلة على كل شيء لديها واحد أو اثنين من الوالدين. ومع ذلك، عقدة دمج جيت قادرة على تمثيل أكثر من رأسين في الدمج، ويستخدم استراتيجية تسمى الأخطبوط. يتم تحديد هذا بشكل افتراضي عند دمج أكثر من فرعين:
في هذه الحالة، لدينا ثلاثة تلتزم دمج معا في عقدة الدمج؛ سيد (الذي تباعد)، وفروع اليكس وبوب من قبل. منذ لدينا عقدة دمج لديها الآن ثلاثة الآباء والأمهات، يمكننا استخدام جيت إعادة تحليل لتحويل رأس ^ 1/2/3 في رؤساء الأولى والثانية والثالثة.
ماذا لو كانت الملفات متضاربة؟
يمكننا إطلاق أداة بثلاث طرق مع جيت ميرجيتول:
لاحظ أن دمج الأخطبوط لا يتعامل مع تعارض أكثر من 2 ملفات. إذا قمت بذلك، كنت في نهاية المطاف مع ميساج خطأ مختلفة:
وأخيرا، فإن الاستراتيجية الأخيرة التي تستحق معرفة هو استراتيجية لنا. وهذا يأخذ أي عدد من رؤساء، ويخلق عقدة دمج، ولكن دون القيام بأي تغييرات في الواقع. وبعبارة أخرى، فإن جيت ديف هيد ^ 1 سوف تعود دائما فارغة لاستراتيجية لنا:
يمكننا التحقق من أن هذه متطابقة، لأن شجرة أشار إلى رأس هي نفس الشجرة التي أشار إليها رئيس ^ 1 (أي الوالد). يتم استخدام لاحقة ^ لإظهار شجرة المرتبطة ارتكاب.
الدالة --decorate إلى جيت سجل يضيف أسماء الفروع إلى الإخراج، والتي يمكن أن تكون مفيدة في إظهار حيث تأتي الاندماجات من. و-graph الوسيطة هي في الغالب من استخدام مع الوسيطة --oneline. على الرغم من أنه يمكنك تشغيل جيت --graph رسائل الالتزام الكامل تميل إلى إخفاء بنية الرسم البياني.
استراتيجية لنا هي مفيدة حقا إذا كنت ترغب في ترميز مجموعة من الالتزامات السابقة ولكن ليس لديهم تؤثر على سيد الحالي (مثلا، لأن كنت قد اخترت الكرز بعض محتويات ولا تريد أن تأخذ أجزاء أخرى، ولكن الحفاظ على لهم في التاريخ كما هو بطريقة أو بأخرى).
دمج رسالة وسريعة إلى الأمام.
سيتم إنشاء رسالة الدمج تلقائيا، استنادا إلى أسماء الفروع التي تقوم بدمجها. ومع ذلك، فمن الممكن لتمرير خيار - m، كما هو الحال مع جيت ارتكاب، لتوريد رسالة إضافية. ويمكن أن يكون ذلك مفيدا إذا احتاجت رسالة الدمج إلى معلومات إضافية مشفرة (مثل الأخطاء التي تم إصلاحها).
ومن الممكن أيضا فرض دمج، حتى لو لم يكن ذلك ضروريا. إذا كان لديك فروع تستند إلى الموضوع، يمكن أن يكون من المفيد الإشارة إلى أن العمل نفذت على فرع منفصل قبل أن يتم دمجها مرة أخرى إلى سيد. سوف تشغيل جيت دمج --no-فف إنشاء عقدة دمج، ما إذا كان أو لا فرع يمكن أن يعاد توجيهه بسرعة أم لا. بما أن دمج الدمج يحتوي على اسم الفرع الذي تقوم بدمجه كجزء من الالتزام، يمكن أن ينتهي بك الأمر بأسماء وصفية لإظهار الميزة التي تم إكمالها:
أن تكون قادرة على الاندماج مع - لا-فف يمكن أن تكون مفيدة عند استخدام بعض أنواع الالتزام سير العمل، حيث يتم استخدام العديد من الفروع لتطوير الميزات الفردية ومن ثم جلبها إلى فرع رئيسي في وقت لاحق. ومن الجدير بالذكر أيضا حجة --merges يسمح لك لتصفية مجرد الدمج في مستودع:
في المرة القادمة، سوف ننظر في ما يمكننا القيام به مع مختلف سير العمل جيت باستخدام دمج - لا-فف.
نعود الأسبوع المقبل للحصول على قسط آخر في جيت تلميح من سلسلة الأسبوع.
المشاركات الاخيرة.
ستاكوفيرفلوو.
على لذيذ.
جيثوب ريبوس.
تحديث الحالة. alblue على جيثب.
كوبيرايت & كوبي؛ 2017 - أليكس بليويت - مدعوم من أوكتوبريس.

جيت دمج استراتيجية عودية
الحصول على فيا أب ستور قراءة هذه المشاركة في التطبيق لدينا!
جيت دمج ريكورسيف لهم، كيف يعمل؟
أواجه قليلا من المشكلة. لدينا منطقتنا كمس الذي يستخدم جيت للتعاون والإصدار والاشياء.
الآن لدي مستودعين جيت A و B، A وهو مشروع و B الذي هو كمس نفسها. الآن أريد الحصول على B إلى A، ولكن عندما أفعل هذا أحصل على الكثير من دمج الصراعات والحل للصراعات هو دائما لاستخدام الاشياء من B.
الآن ما أعتقد أنني بحاجة إليه.
لأنني أريد أن دمج وعندما يكون هناك نزاع دمج يجب أن تضطر إلى استخدام الحل من B. ولكن لا أستطيع الحصول عليه للعمل. يبقى دائما يقول لي قاتلا: 'هم' لا يشير إلى ارتكاب.
وجدت عودتهم هنا.
هل أحد يعرف ما أفعله خطأ؟
يجب استخدام هذا النموذج لتمرير خيارات إستراتيجية الدمج:
أيضا التأكد من الإصدار الخاص بك سوبورس - Xtheirs، وهذا هو ميزة حديثة جدا (؟)
وأعتقد أن سبب فشله هو أنك تحدد "عودتهم" كاستراتيجية. "العودية" هي استراتيجية، وعندما تضع مساحة بعد ذلك، "لهم" يفسر على أنه شيء جيت يحتاج إلى دمج نسخة عملك مع (على سبيل المثال فرع آخر أو ريفسك).
أعتقد أنك لن تكون قادرا على تحديد استراتيجية تماما مثل ما تريد. هناك استراتيجية تسمى "لنا" وهو عكس ما تريد.
النمط المعتاد المستخدم في هذه الحالة هو إما دمج أو ريبيس إلى مستودع "B". من داخل "A" نسخة عمل مستودع، سوف تفعل إعادة تمهيد، إذا كان ذلك ممكنا (قد لا يكون ممكنا، إذا كنت تشارك بالفعل الريبو جيت مع المطورين الآخرين). إن عملية الحذف ستؤدي أساسا إلى نقل المستودع A إلى التزام شائع داخل المستودعات، ثم يتم تطبيق "B"، ثم تلتزم "A" بالأعلى. يمكنك حل أي نزاعات دمج على طول الطريق.
بمجرد أن تذهب من خلال الألم إما دمج أو الانتعاش إلى مستودع "B"، ودمج المستقبل يكون أقل إيلاما.

الفصل 7. الدمج.
الاندماج هو عملية الجمع بين التغييرات الأخيرة من عدة فروع إلى التزام جديد واحد هو على كل تلك الفروع. في معظم الأحيان هناك فرعين فقط المعنية، ولكن في الواقع، يمكن أن يكون هناك أي عدد؛ إذا كان هناك أكثر من اثنين، ويسمى "دمج الأخطبوط". عندما يكون هناك سوى فرعين، ويسمى الفرع الحالي "لدينا" جانب من الدمج، في حين أن الفرع الآخر يسمى الجانب "هم". منذ دمج الأخطبوط هو غير عادي، ونحن عموما نفترض دمج فرعين في هذه المناقشة.
لقد وصفنا كيف يمكن ل جيت البدء في دمج لك كجزء من سحب سحب (انظر "سحب")، ولكن يمكنك أيضا تنفيذ الاندماجات صراحة. في ما يلي سيناريو نموذجي: كنت تعمل على مشروع برمجي، وكان لديك فكرة عن ميزة جديدة، ولكنك لا تريد أن يؤدي عملك التجريبي على هذه الميزة إلى إزعاج تطورك الأساسي. لذلك يمكنك إنشاء فرع اسمه ميزة لاحتواء العمل:
عندما تحتاج إلى العودة إلى العمل على الجزء الرئيسي من المشروع الخاص بك، يمكنك ارتكاب عملك على فرع ميزة والعودة إلى سيد (أو أي فرع تحتاج إلى العمل على):
كنت لا تزال مثل هذا لبعض الوقت. في نهاية المطاف، إذا قررت أنك لا تحب فكرة الميزة الخاصة بك، يمكنك تجاهل العمل عن طريق حذف الفرع مع فرع جيت ميزة - D. إذا قررت الاحتفاظ بها، ومع ذلك، في وقت ما سوف ترغب في دمجها في رمز المشروع الرئيسي، ويمكنك القيام بذلك مع دمج:
فمن الأفضل أن يكون كل عملك ملتزمة قبل تشغيل جيت دمج. وهذا هو، يجب أن تظهر حالة جيت أي تغييرات المعلقة أو الملفات غير المتتابعة. النسخ من دمج إلى الحالة الأولية قد يكون من الصعب على خلاف ذلك. يمكنك استخدام جيت خبأ وسيلة سريعة لحفظ التغييرات العمل واستعادتها في وقت لاحق (انظر "جيت ستاش").
كان هذا الدمج بسيطا. كنت قد أضافت الملفات effulgent. c و epiphany. h على فرع ميزة، وأنها لم تكن موجودة على سيد، لذلك جيت فقط إضافتها. كنت قد أجريت تغييرات طفيفة على main. c على كلا الفرعين، ولكن هذه التغييرات لم تتعارض، لذلك جيت مجتمعة لهم تلقائيا وملتزمة نسخة مدمجة. ويسمى الرسم البياني أسي مع أسماء الملفات على اليسار "ديفستات"؛ فهو موجز للتغييرات التي أدخلت على هذا الالتزام. خطوط خطوط زائد وناقص تمثل العدد النسبي للإضافات الخط ("الإدراج") والحذف في الملف المقابل.
وقد حدث كلا من جوانب الدمج هنا: المحتوى والهيكل. أولا، جمع جيت محتوى كلا الفرعين عن طريق إضافة ودمج التغييرات على الملفات؛ ثم، سجلت حقيقة دمج هيكليا من خلال إنشاء دمج ارتكاب ربط كلا الفرعين معا في الرسم البياني الالتزام. وهذا يشير في التاريخ أولئك الذين ارتكبت محتوياتها مجتمعة لإنتاج واحدة جديدة، من خلال جعلها والديها. يتم تعريف "دمج الالتزام" ببساطة كالتزام وجود أكثر من واحد من الوالدين.
يمكنك متابعة هذه العملية طالما تريد، والعمل على فرع الميزة بشكل منفصل ودمجها بشكل دوري عملها في سيد. إذا كنت تفعل، وربما تحتاج أيضا إلى دمج الطريقة الأخرى كذلك، وتحديث فرع الميزة مع أحدث الأعمال على الماجستير، بحيث كنت لا تعمل على رمز عفا عليها الزمن. لهذا، فقط تفعل العكس: التحول إلى ميزة وتشغيل جيت دمج سيد.
عندما يتم دمج ميزة جديدة تماما في التنمية الرئيسية، وكنت لم تعد بحاجة إلى العمل على ذلك بشكل منفصل، يمكنك حذف فرع ميزة مع فرع جيت ميزة د. كما نوقش في "حذف فرع"، جيت سوف يشكو إذا لم تكن قد دمجت تماما ميزة في سيد، لمنعك من فقدان بطريق الخطأ العمل. حذف ميزة لا حذف أي من محتواه أو التاريخ. فإنه يزيل فقط اسم "ميزة" كنقطة مرجعية، وهو المكان الذي كنت تنوي إضافة التزامات مستقلة في وقت لاحق، لأنك لم تعد في حاجة إليها. يمكنك إعادة استخدام "ميزة" كاسم فرع في المستقبل إذا كنت تريد، وسوف يكون هناك أي اصطدام مع الاستخدام السابق. في الواقع، وبصرف النظر عن ربما في ارتكاب رسائل أو سجلات، بمجرد حذف فرع، ليس هناك سجل في مستودع السليم أنه كان موجودا من أي وقت مضى! أسماء الفروع تخدم للإشارة إلى أجزاء من قاعدة بيانات الكائن لا تزال ذات أهمية، وحيث لا تزال التنمية تحدث؛ إذا تم دمج محتوى فرع في فروع أخرى، وكنت لم تعد بحاجة إلى خط التنمية مع هذا الاسم، ثم يمكنك فقط حذفه، وإعادة استخدام الاسم في وقت لاحق عن شيء آخر إذا أردت. وبالمثل، إذا نظرنا إلى الوراء في الرسم البياني الالتزام، فإنه ليس من الممكن أن نعرف على اسم الفرع ارتكبت ارتكاب معين؛ حتى في التاريخ الخطي، قد يكون اسم الفرع الحالي قد تغيرت في مرحلة ما في الماضي. قد يكون من المثير للاهتمام أو المفيد أن نعرف هذا في بعض الحالات، ولكن جيت فقط لا تبقي هذه المعلومات. فروع جيت سريعة الزوال بمعنى، مجرد أدوات لبناء الرسم البياني الالتزام، وهو ما يهم.
دمج النزاعات.
الاندماج أعلاه ذهب بسلاسة، ولكن ماذا لو قمت بإجراء تغييرات في الفرعين التي جيت لا يمكن أن تتحد من تلقاء نفسها؟ وتسمى هذه "النزاعات دمج"، وسوف جيت توقف ويطلب منك حلها قبل الالتزام. ويمكن أن تتراوح هذه العملية من بسيطة إلى معقدة جدا، اعتمادا على المحتوى والتغييرات المعنية؛ لحسن الحظ، هناك أدوات متاحة للمساعدة، سواء في جيت نفسها والتي جيت يمكن أن تعمل. دعونا المشي من خلال مثال بسيط. لنفترض أن لديك ملف مبيوس مع المحتويات التالية:
... وجعل لكم يرتكب على فروع شاندرا و فلويد تغييره بالتالي:
لقد قمت بتغيير نفس السطرين على كل جانب بطرق مختلفة، ولن يحاول نهج دمج جيت المنحى الخط تخمين القصد أو الجمع بين الأسطر (على سبيل المثال، شكل واحد حروف الدلافين الدلافين، مثيرة للاهتمام كما قد تكون)؛ فإنه سيشير إلى نزاع الدمج:
تشير عبارة كونفليكت (المحتوى) إلى أن التعارض ناتج عن تغييرات محتوى لا يمكن التوفيق بينها في هذا الملف. وقد تشير جيت إلى أسباب أخرى أيضا، مثل إضافة / إضافة تعارض، حيث يتم إضافة نفس اسم الملف إلى كلا الفرعين ولكن مع محتويات مختلفة.
إذا كنت تبدأ دمج ثم تريد إلغاء ذلك - ربما كنت لا تتوقع الكثير من الصراعات وليس لديك الوقت للتعامل معهم الآن - مجرد استخدام جيت دمج --abort.
للحصول على نظرة عامة على حالة الدمج، استخدم حالة جيت. سيتم عرض أية تغييرات تم حلها من قبل جيت من تلقاء نفسها كما تم تنظيمها بالفعل لارتكابها، وهناك قسم منفصل في نهاية تعارضات الدمج:
المسارات غير المدمجة هي ملفات بها تعارضات تعذر على جيت حلها. لمعرفة ما حدث خطأ في التفاصيل، استخدم جيت ديف. هذا الأمر لا يظهر فقط الاختلافات بين تركيبات مختلفة من شجرة العمل، مؤشر، ويرتكب؛ كما أن لديها وضع خاص للمساعدة في النزاعات دمج:
هذا العرض يظهر الإصدارات البديلة من القسم في الصراع، مفصولة ======= و ملحوظ مع فرع المقابلة: لنا (الفرع الحالي) و لهم (في هذه الحالة فلويد، فرع نحن دمج في بلدنا) . كالمعتاد، جيت ديف يظهر الاختلافات بين شجرة العمل والمؤشر، والتي في هذه الحالة هي الصراعات التي لم يتم حلها بعد؛ لا تظهر التغييرات التي أجريت بالفعل والتي نظمت. يمكنك استخدام جيت ديف - تعيين لرؤية تلك؛ إضافة --stat لمحة عامة. ستجد أن جيت قام بتحديث ملف العمل بترميز مماثل:
بعد تعديل الملف لحل التعارض، استخدم جيت لإضافة مرحلة الإصدار الثابت للالتزام وإزالته من قائمة المسارات المتعارضة (إذا كان القرار في الواقع لحذف الملف، استخدم جيت رم). بمجرد معالجة جميع حالات التضارب وحالة جيت لم تعد تقارير أي مسارات غير مدمجة، يمكنك استخدام جيت تلتزم بإكمال الدمج. سوف جيت تقديم رسالة ارتكاب تحتوي على تفاصيل حول هذا الدمج بما في ذلك فروعها والصراعات، والتي يمكنك تحرير ما تراه مناسبا؛ في هذه الحالة :
... ويمكنك أن ترى أنك قد أنشأت "دمج دمج" وجود أكثر من أحد الوالدين:
الفرع الآخر، فلويد، بقي حيث كان، في حين أن فرع شاندرا الحالي قد تقدم واحد تلتزم من e355785d إلى aeba9d85، وهذا الأخير يرتكب توحد الفرعين. وهناك التزام جديد على فلويد يسبب لهم أن تتباعد مرة أخرى، ويمكنك دمج مرة أخرى في المستقبل إذا كنت بحاجة إلى (في أي اتجاه). لاحظ أنه عند هذه النقطة، سوف تظهر سجل جيت بسيط يرتكب من كلا الفرعين، وليس فقط تلك التي قدمت بينما على شاندرا:
كنت قد توقعت أن ترى يرتكب فقط aeba9d85، e355785d، و 50769fc9. قد يبدو هذا العرض غريبا في البداية، لكنه مجرد طريقة مختلفة للنظر في مفهوم "فرع". ويعرف فرع جيت بأنها مجموعة من جميع الالتزامات التي يمكن الوصول إليها في الرسم البياني الالتزام من طرف الفرع. فكر في ذلك كما يرتكب كل ما ساهم المحتوى إلى طرف ارتكاب (والتي، بعد الدمج، ويشمل جميع يرتكب قبل ذلك واحد على كلا الفرعين).
في حالات بسيطة، قد تحصل على ما تظن بأنه تاريخ "هذا الفرع" مع جيت لوغ --first-بارنت، الذي يتبع فقط الوالد الأول للدمج يرتكب بدلا من كل منهم. ومع ذلك، هذا ليس مضمونا، وفي تاريخ أكثر تعقيدا فإنه لن يعني الكثير. منذ جيت يسمح التاريخ غير الخطية، قائمة بسيطة من ارتكاب غالبا ما تكون ليست مفيدة جدا، وتحتاج إلى أدوات التصور لمساعدتك على تفسير ذلك (انظر "أدوات بصرية").
حل دمج النزاعات.
ليس لدى جيت أدوات مدمجة للتعامل بشكل مباشر مع نزاعات الدمج مباشرة؛ هذا ما هي أدوات دمج خارجية، والتي سننظر فيها قريبا في "دمج أدوات". ومع ذلك، وهنا بعض النصائح لاستخدامها في حالات بسيطة.
جيت لوغ - p --mmerge يعرض كافة الارتباطات التي تحتوي على تغييرات ذات صلة بأي ملفات غير مدمجة، على أي فرع، جنبا إلى جنب مع ديفس. هذا يمكن أن تساعدك على تحديد التغييرات في التاريخ الذي أدى إلى الصراعات. إذا كنت ترغب في تجاهل كافة التغييرات من جانب واحد من الدمج، استخدم جيت جيت - ملف لتحديث ملف العمل مع نسخة من الفرع الحالي أو فرع آخر، تليها جيت إضافة ملف إلى مرحلة التغيير ووضع علامة على الصراع كما حل. بعد القيام بذلك، إذا كنت ترغب في تطبيق بعض التغييرات من الجانب الآخر، استخدم جيت الخروج - p ملف فرع. هذا يبدأ حلقة تفاعلية التي تسمح لك لتطبيق أو تعديل المقاطع المختلفة بشكل انتقائي (انظر العنصر "تصحيح" في قسم "الوضع التفاعلي" من جيت-إضافة (1) لمزيد من التفاصيل).
في مثالنا، إذا قررت الاحتفاظ بإصدارك الافتراضي، ولكن تطبيق التغييرات بشكل انتقائي من الفرع الآخر، يمكنك إجراء ما يلي:
إذا كان الفرع الحالي موجود بالفعل في الآخر (أي، رأس هو الجد من الطرف الآخر طرف)، ثم جيت دمج سوف تتحرك فقط الفرع الحالي حتى لتلبية الآخر في "سريع إلى الأمام" التحديث، وليس جعل التزام جديد على الإطلاق. يمكنك فرض دمج دمج على أي حال مع جيت دمج --no-فف ("لا سريع إلى الأمام")، إذا كان لديك بعض الأسباب للقيام بذلك. إذا كان العكس صحيحا، والفرع الآخر موجود بالفعل في هذا واحد، ثم جيت سوف أقول ببساطة أن الفرع الحالي هو "بالفعل ما يصل إلى التاريخ"، ولا تفعل شيئا. والهدف من الدمج هو أن تدخل في الفرع الحالي أي تغييرات على الفرع الآخر منذ اثنين المتباعدة - لكنها لم تتباعد. إذا كنت ترغب في استخدام جيت دمج المحتوى وآلية حل النزاعات، ولكن لا تريد إنشاء دمج دمج، استخدام جيت دمج --squash. هذا يعمل مثل الدمج العادي فيما يتعلق بالمحتوى، ولكن الالتزام به يخلق هو فقط على الفرع الحالي (وهذا هو، لديه أحد الوالدين ولا يتصلون إلى الفرع الآخر في الرسم البياني الالتزام). يمكنك استخدام جيت دمج - m لتحديد رسالة ارتكاب تماما كما هو الحال مع جيت ارتكاب، على الرغم من أن نتذكر أن جيت يوفر معلومات مفيدة في الرسالة المرفقة، والتي قد تفضل أن تبدأ وتحرير بدلا من ذلك (الذي يحدث افتراضيا). استخدام جيت دمج - لا-الالتزام لوقف جيت من الالتزام عندما ينجح دمج التلقائي، في حال كنت تريد أن يكون نظرة أولا. هذا ليس ضروريا للغاية، حيث يمكنك دائما إحباط ارتكاب عن طريق إعطاء رسالة ارتكاب فارغة، أو إجراء أي تغييرات تريد بعد ذلك واستخدام جيت ارتكاب --amend. سجلات جيت أن الدمج قيد التقدم عن طريق تعيين المرجع MERGE_HEAD للإشارة إلى الفرع الآخر؛ هذه هي الطريقة التي يعرف أن تجعل دمج دمج (على العكس من ارتكاب بسيط على الفرع الحالي) حتى عندما يكون هناك أوامر التدخل أثناء حل النزاعات.
تفاصيل حول الدمج.
عند دمجها، تعتبر جيت التغييرات التي حدثت على الفروع المعنية منذ آخر مرة متباعدة. في المثال أعلاه، فرقت شاندرا و فلويد أخيرا في ارتكاب 50769fc9، وبالتالي فإن التغييرات التي سيتم التوفيق بين تلك التي يرتكب e355785d و a5374035. قد تختلف هذه الفروع وتم دمجها عدة مرات في السابق، ولكن سيطلب منك فقط التعامل مع التغييرات الجديدة منذ أن حدث آخر. بعض أنظمة التحكم في الإصدار الأخرى لا تحتوي على هذه الميزة، بحيث دمج الفروع بشكل متكرر مشكلة: أنت في نهاية المطاف حل الصراعات نفسها مرارا وتكرارا.
على وجه التحديد، عند دمج عدة فروع، جيت تسعى إلى "قاعدة دمج": سلف مشترك مؤخرا من جميع النصائح فرع، لاستخدامها كنقطة مرجعية للتحكيم التغييرات. على الرغم من أنه في حالات معقدة قد تكون هناك احتمالات متعددة لقاعدة دمج (انظر جيت-ميرج-بيس (1))، في الحالة الشائعة من مثالنا، هناك خيار واضح واحد، الذي يجد جيت تلقائيا. منذ دمجنا الآن ينطوي على ثلاث ارتكبت اثنين من النصائح فرع وقاعدة دمج، ويسمى "دمج ثلاثي الاتجاه".
تذكر أن حالة جيت أظهرت نزاعاتنا، "المسارات غير المدمجة". حيث أنها لا تبقي هذه المعلومات؟ هناك علامات الصراع في ملفات العمل، ولكن سيكون بطيئا لقراءة كافة الملفات لهذا الغرض، وعلى أي حال من شأنها أن لا تساعد على تعديل / حذف الصراع. ويوضح الجواب مرة أخرى فائدة الفهرس. عندما يكون هناك نزاع دمج لملف، جيت ببساطة يخزن ليس نسخة واحدة من الملف في الفهرس، ولكن ثلاثة: أولئك الذين ينتمون إلى قاعدة الدمج وإلى فروع الحالية "الأخرى"، مرقمة 1 و 2 و 3، على التوالي. ويسمى الرقم "المرحلة" من الملف وهو خاصية مميزة لإدخال الفهرس مع اسم الملف وبتات الوضع، وهكذا. في الواقع، هناك مرحلة ثالثة، 0، وهي الحالة المعتادة للدخول الذي ليس له صراع دمج مرتبط. يمكننا أن نرى هذا باستخدام جيت لس الملفات، مما يدل على محتويات الفهرس. وقبل عملية الدمج، نرى ما يلي:
الحقول هنا هي بت وضع، معرف الكائن فوب عقد محتويات الملف، رقم المرحلة، واسم الملف. بعد تشغيل جيت دمج فلويد والحصول على صراع لهذا الملف، ونحن نرى شيئا مختلفا جدا (باستخدام - U بدلا من - S سوف تظهر فقط مسارات غير مدمجة؛ وهنا لدينا ملف واحد فقط على أي حال):
لاحظ أن معرف المرحلة 2 يطابق ما كان سابقا المرحلة 0 أعلاه، حيث أن المرحلة 2 هي النسخة الموجودة في الفرع الحالي. يمكنك استخدام جيت القط ملف لرؤية محتويات المراحل المختلفة، وهنا المرحلة 1 دمج قاعدة الإصدار:
يمكنك الرجوع إلى مرحلة معينة من ملف مع بناء الجملة: n: باث؛ لذلك جيت المعرض: 1: مبيوس هو أسهل يعادل لهذا.
جيت دمج ثلاثة يرتكب في الفهرس بهذه الطريقة في بداية الدمج. ثم يتبع مجموعة من قواعد بسيطة لحل بسرعة الحالات السهلة. فمثلا:
إذا كانت جميع المراحل الثلاث تتطابق، فقم بالتقليل إلى مرحلة واحدة 0. إذا تطابقت المرحلة 1 مع المرحلة 2، فقم بالتقليل إلى مرحلة واحدة 0 مطابقة المرحلة 3 (أو العكس بالعكس): أجرى أحد الجانبين تغييرا بينما لم يفعل الطرف الآخر شيئا. إذا تطابقت المرحلة 1 مع المرحلة 2، ولكن ليس هناك مرحلة 3، ثم إزالة الملف: لم نجري أي تغيير، في حين حذف الفرع الآخر، لذلك قبول تغيير الفرع الآخر. إذا اختلفت المرحلتان 1 و 2، وليس هناك مرحلة 3، فأبلغ عن تعارض "تعديل / حذف": غيرنا الملف، بينما حذف الفرع الآخر ذلك؛ يجب على المستخدم أن يقرر ما يجب القيام به.
…وهكذا دواليك. لاحظ أنه لمطابقة، جيت لا تحتاج لجلب الملفات الفعلية. فإنه يمكن فقط مقارنة معرفات كائن فوب بالفعل في الفهرس، لأنها هي تجزئة محتويات الملفات. هذا سريع جدا. على أساس المحتوى على انتصارات مرة أخرى. يمكنك أن تقرأ عن هذه العملية بمزيد من التفصيل في جيت-ريد-تري (1). أي ملفات لا يمكن حلها بسهولة بهذه الطريقة يجب بعد ذلك أن تدرس في الواقع لمحاولة دمج محتوياتها.
دمج أدوات.
دمج يمكن أن تكون مهمة معقدة، مع يحدق في عشرات من المقاطع المتعارضة من التغييرات شفرة المصدر من نفسك وغيرهم من الناس، ومحاولة الجمع بينهما في عمل واحد كله. هناك أدوات المتاحة التي تذهب إلى ما هو أبعد من نص بسيط إخراج جيت ديف في مساعدتك على تصور وحل مثل هذه الصراعات. جيت يتكامل بسلاسة مع هذه "أدوات دمج" الخارجية، لمساعدتك على إنجاز المهمة بسهولة أكبر. جيت يدعم أكثر من اثني عشر أدوات دمج حرة وتجارية من خارج منطقة الجزاء، بما في ذلك أراكسيس، تظهر، أوبنديف، kdiff3، و غفيمديف. كما أنه يحدد واجهة التي يمكنك استخدامها أكثر من أي أداة من هذا القبيل، وعادة ما تتطلب فقط البرنامج النصي المجمع بسيط لتوصيله إلى جيت.
لا يمكننا الخوض في تفاصيل أدوات الدمج الفردية؛ وكثير منهم برامج معقدة في حد ذاتها، وسوف تتطلب كتاب صغير آخر كل لوصف. هنا، سنصف فقط كيف تعمل مع جيت عموما.
السائق لاستخدام أداة دمج هو جيت ميرجيتول. بمجرد استدعاء هذا الأمر يعمل على كافة الملفات مع تعارض دمج، يسأل عن كل إذا كنت ترغب في استدعاء أداة دمج المحدد على الملف. أداة الدمج الافتراضية هي أوبنديف، ولكن يمكنك تعيين افتراضيا مختلفا مع متغير التكوين جيت. ستقدم لك الأداة عادة عرضا لنسختين "أورس" و "ثيرس" من الملف، جنبا إلى جنب مع قاعدة الدمج، وتوفر طرقا للانتقال من تغيير أو تعارض إلى آخر، ثم حدد تغيير الجانب الذي يجب استخدامه ( أو دمجها)، وما إلى ذلك. عند إنهاء أداة الدمج التي تشير إلى النجاح، سيقوم جيت بإضافة النسخة المدمجة إلى الفهرس (وبالتالي وضع علامة على هذا التضارب كما تم حله)، ثم انتقل إلى الملف التالي غير المدمج.
التبديل - y إلى جيت ميرجيتول يخبرك لتشغيل الأداة على كافة الملفات غير المدمجة، دون التوقف إلى المطالبة نعم أو لا لكل واحد. جيت ميرجيتول يترك foo. orig احتياطية لكل ملف فو أنه يعالج، لأنك قد عدلت نفسك قبل تشغيل أداة الدمج. يمكنك تعيين mergetool. keepBackup لا لإيقاف هذه الميزة. في الواقع، جيت لا يزال يجعل النسخ الاحتياطي. فإنه يحذف فقط عند الخروج أداة دمج بنجاح، بحيث النسخ الاحتياطي لا يزال هناك في حالة تعطل الأداة.
If a merge tool exits unexpectedly or doesn’t work properly, you may see files like these left behind (for the file main. c ):
These are the temporary files that Git uses to pass the various file versions to the merge tool.
Custom Merge Tools.
If you want to use a merge tool not directly supported by Git, it need only obey some simple conventions; usually, you’ll write a glue script to accommodate them. Git passes four filenames to the tool as environment variables :
The tool should exit with a code of zero to indicate that the user is happy with the merged version, saved to the filename in the MERGED environment variable. A nonzero exit code means that Git should ignore that file and not mark this conflict resolved. To define a new Git merge tool named “foo” with your own program named newtool :
This shows the files being passed on the command line to newtool ; if your program reads the environment variables itself, then of course that’s not required. The trustExitCode setting means that Git will interpret the tool’s exit code as previously described; if this setting is false, Git will prompt the user for what to do anyway.
Merge Strategies.
Git has a number of approaches it can take to automatically merge files that have been changed by both sides of a merge; that is to say, exactly what it does in analyzing text to determine the boundaries of changed blocks, when blocks have been moved, when changes can be safely merged, and when they should be punted to the user. These approaches are called “merge strategies,” and each may in turn have various options; Git can even be extended with new strategies by writing custom “merge drivers,” without having to touch Git proper.
The built-in merge strategies are described in git-merge(1) . The many options are quite technical and involved, and Git’s default choice of strategy is usually sufficient; we will not cover them in depth here. However, here are a few tips involving merge strategies that are generally useful:
Why the Octopus?
An octopus merge is generally used to tie together several topic branches with the master branch in preparation for a new release of a project, bringing in all their separate contributions. The individual branches should already have been reconciled with the master and have no conflicts amongst them, or else as mentioned, the octopus merge will not work. The octopus merge does not have any inherent advantage over simply merging all the topic branches into the master pairwise and reconciling the conflicts there; it accomplishes the same goal and incorporates the same history. However, with a large number of branches, it can make for a cleaner and more easily understood commit graph, and so some people prefer it. See Figure 7-1.
Reusing Previous Merge Decisions.
Git can remember merge conflict resolutions you made in the past, and reuse them automatically if you run into similar conflicts later. This feature goes by the name git rerere , for “reuse recorded resolution.” This is useful if you’re working on a particularly difficult merge. You may abort a merge and retry it in various ways, but having resolved some conflicts in the meantime, this feature can remember and reapply those decisions. It can also be helpful if you’re rewriting repository history, or in maintaining branches on which you end up resolving the same conflicts repeatedly until the branch’s content can finally be merged appropriately.

Git merge strategy recursive


إلحاق؟ t = 30 لبدء التشغيل في 30 ثانية،؟ t = 3: 20 لبدء التشغيل في 3m 20s.
تضمين رابط الصورة.
استخدم المقتطفات أدناه لعرض لقطة شاشة تربط هذا التسجيل. مفيد في الأماكن التي لا يسمح فيها بالنصوص البرمجية (على سبيل المثال في ملف ريدمي للمشروع).
تضمين المشغل.
إذا كنت تدمج على صفحتك الخاصة أو على موقع يسمح علامات النصي، يمكنك استخدام القطعة لاعب كامل:
الصق علامة النص البرمجي أعلاه حيث تريد عرض المشغل على صفحتك.
تنزيل هذا التسجيل.
الإعادة في محطة.
يمكنك إعادة هذا التسجيل في محطة الخاص بك مع أسينما اللعب الأمر:
إذا لم يكن لديك أسينما كلي تثبيت ثم انظر تعليمات التثبيت.
استخدام مع لاعب مستقل على موقع الويب الخاص بك.
تحميل لاعب أسينما من صفحة الإصدارات لاعب (تحتاج فقط. js و. كس ملف)، ثم استخدامه مثل هذا:
انظر أسينما لاعب ريدمي للحصول على تعليمات الاستخدام الكامل.

No comments:

Post a Comment