هل تتوقع استنساخ GIT-SVN المختلفة من نفس مستودع SVN أن تكون قادرا على مشاركة التغييرات ثم git svn dcommit؟

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

  •  18-09-2019
  •  | 
  •  

سؤال

لقد قرأت قدرا كبيرا من "الذهاب من SVN إلى GIT" وغيرها من مقالات "سير العمل الجيت SVN" على الويب، وما زلت أعتقد أنهم غالبا ما يتعاملون مع مواقف بسيطة للغاية. غالبا ما يستهدفون الرجال الذين يرغبون فقط في استخدام GIT و Hackally محليا، دون استخدام القوة الكاملة للجهاز، مثل سحب وجلب ودمج وما شابه ذلك بين المطورين المتعددين الذين سيدنسوا جميعا مستودع SVN مع GIT-SVN لا تزال تتوقع أن تكون قادرا على دفع تغييراتها في أي وقت إلى مستودع SVN (الرسمي)، والعودة إلى العمل في GIT وتقاسم الأشياء الخاصة بهم وما إلى ذلك.

كلما اعترفت هذه المقالات بأنك لا تستطيع أن تفعل كل ما تفعله في GIT نقية، فإن العواقب و UPS المسمار المحتمل لا يتم تفسيرها بشكل واضح (أو ربما مجرد لي؟). حتى صفحة GIT-SVN MAN تذكر التحذير، ولكن ليس حقا بطريقة واسعة النطاق.

بناء على ما قرأته، أشعر أنه قد يكون هناك مشاكل عند استخدام git-svn في تلك الطريقة المحددة، والتي سوف أصف أدناه. هل يمكن لأي شخص أن يقول لي إذا كنت على حق في هذا؟

هنا طريقة "المطلوب" للقيام بالأشياء:

  1. لدينا مشروع في مستودع SVN
  2. المطور أحد GIT-SVN-CLONE's REPO SVN. يبدأ في اختراق الأشياء محليا
  3. المطور B GIT-SVN-CLONE's نفس svn repo. يبدأ في الاختراق الأشياء بمفرده.
  4. بعد القيام بذلك لبعض الوقت، ربما تضيف ديفس C / D / ...، والحصول على مطورين آخرين يقومون ب "قياسي" SVN يرتكب على الريبو الأصلي، فإن مستخدمي GIT يرغبون في مشاركة رمزهم ويقومون بجميع أنواع السحر بجيت وبعد
  5. يود أي واحد من هؤلاء المستخدمين GIT أن يكونوا قادرين على دفع التغييرات المدمجة الآن إلى SVN (Dcommit؟)

سؤالي هو: هل أنا أحلم؟ قرأت منذ بعض الوقت، في كتاب بوابة أعتقد، أن استنساخ GIT-SVN يمكن أن تخلق مستودعات الجيت بطبيعة الحال "مرآة" ل Repo SVN، ولكن أن Repos Git تم إنشاؤه بهذه الطريقة من قبل مطوري مختلفين سيكون لديهم مختلفة " معرفات "وتلتزم سيكون لها تجزئة مختلفة. لذلك فهمي كان أن هؤلاء الجيت ريبوس لن يشارك أي سلف مشترك بوابة المشتركة، وبالتالي لن تتمكن من استخدام جميع أوامر git التي تحتاجها لمشاركة ودمج وما إلى ذلك. هل صحيح، هل سنواجه مشاكل مع سير العمل هذا؟

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

هل أفعالها تماما تحذيرات GIT-SVN؟ هل هناك أي طريقة أبسط للقيام بذلك؟

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

المحلول

المشكلة هي الخطوة 4 بالطبع. يحاول Dcommit إعادة تشغيل سجلك المحلي على الخادم. Dcommit يتظاهر بأنك عميل SVN. الآن، إذا كان الرمز الذي تكون فيه dccommitting ليس فقط منك، فهذا شيء يصعب على dcommit ل SVN.

إليك ما جرو يكتب في هذه المسألة:

  • من أجل البساطة والتشغيل المتداخل مع SVN، يوصى بإنشاء جميع مستخدمي GIT-SVN استنساخ وجلب و Dcommit مباشرة من SVN Server (مستودع SVN البعيد الذي هو) وتجنب جميع GIT Clone / سحب / دمج / دفع العمليات بين مستودعات GIT والفروع التي يتم استرجاعها إما عبر استنساخ GIT SVN واستخدامها أيضا لدفع التغييرات الخلفية إلى مستودع SVN البعيد.
  • الطريقة الموصى بها لتبادل التعليمات البرمجية بين فروع GIT والمستخدمين هي تنسيق GIT-Patch و GIT AM، أو فقط git svn dcommit إلى مستودع SVN.
  • نظرا لأن Git SVN DCOMMIT يستخدم GIT SVN Rebase داخليا، فإن أي فروع GIT التي نضغط عليها قبل جيت SVN DCOMMIT سيتطلب إجبار الكتابة فوق المرجع الحالي في مستودع المستودع عن بعد. يعتبر ذلك عموما ممارسة سيئة، راجع وثائق دفع الجيت للحصول على التفاصيل.
  • لا ينصح بتشغيل Git Merge أو GIT سحب على فرع نخطط ل GIT SVN Dcommit من. لا يمثل SVN دمج في أي أزياء معقولة أو مفيدة حتى لا يمكن للمستخدمين الذين يستخدمون SVN أن يروا أي دمج صنعناه. علاوة على ذلك، إذا كنا ندمج أو جيت سحب من فرع GIT وهو مرآة من فرع SVN، قد يلتزم Git SVN DCOMMIT بالفرع الخطأ.
  • لا يستنسخ Git Clone فروعا تحت Refs / Remotes / التسلسل الهرمي أو أي بيانات تعريف Git-svn، أو التكوين. لذلك يجب استخدام المستودعات التي تم إنشاؤها وإدارتها باستخدام GIT-SVN rsync.للاستنساخ، إذا تم الاستنساخ على الإطلاق.
  • يجب ألا نستخدم خيار إعادة توجيه GIT للتغيير لدينا بالفعل dcommitted. تعتبر ممارسة سيئة - ارتكبنا بالفعل دفعنا بالفعل إلى مستودع بعيد للمستخدمين الآخرين، و Dcommit مع SVN مماثلة لذلك. يمكن العثور على مزيد من المعلومات حول هذا عند تعديل ارتكاب واحد و مشاكل مع إعادة كتابة التاريخ.

نصائح أخرى

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

يمكنك استخدام فروع خلف الكواليس عند التعاون مع مستخدمي GIT الآخرين في فريقك، لكنهم لم أجروا شخصيا كثيرا مع هذا. طالما كنت خطية السجل قبل dcommitting يجب أن تعمل.

إليك النسخة القصيرة (تكرر الكثير ما قلته بالفعل):

  1. استنساخ الريبو التخريب في ريبو "جلب" على خادم مركزي
  2. rep repo "عارية" على نفس الخادم
  3. دفع من الريبو fecthing إلى الريبو العاري
  4. هل لديك مطورون استنساخ الريبو العاري ثم
    1. git svn init svnurl لتكوين جهاز التحكم عن بعد GIT-SVN، و
    2. git update-ref refs/remotes/git-svn refs/remotes/origin/master لذلك git-svn لديه مؤشر إلى مراجعة
  5. تلقائيا (ارتكاب الخطاف) لديها "جلب" repo svn Rebase، ودفع إلى الريبو العاري
  6. المطورين سحب من الريبو العاري مع git pull --rebase
  7. المطورين يركضون git svn dcommit يجب أن تكرر أولا update-ref أعلاه في حالة المراجعات الأحدث القادمة من SVN.

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

ما اعتدت القيام به، هو إنشاء استنساخ جوازي أولي SVN، ثم شاركت أنه. جيت بين المطورين باستخدام GIT، لذلك كان لدينا نفس المراجع بالضبط.

يبدو أنه يعمل بشكل صحيح كما تمكنا من استخدام "ميزات جيت محددة" بين مستخدمي GIT، طالما بقينا في شجرة خطية (أي REBASING بدلا من الدمج).

بمجرد خطوة "قضية" موزعة "، فأنت أفضل حالا مع استنساخ جيت ريبو العارية بين المطورين.
فيما يتعلق بمرحلة الاستيراد الصادرات إلى SVN Repo العام، بالنسبة للآخرين للاستخدام، النصوص
git2svn و svn2git. يمكن أن تساعد في تغليف السحر.

هناك اعتبارات أخرى عند العمل في GIT و SVN Repos موجودة في السؤال "سير العمل والمساعدة في مشاريع GIT و 2 SVN و" Writtcopy "الواحدة"

هناك أداة تحل مشكلة مشاركة مستودع GIT متزامنة مع مستودع التخريب.

Subgit. هي مرآة جنبا إلى جنب جيت SVN Bi-directoral.

قد يقوم المرء بتثبيت الفرعية في مستودع التخريب والحصول على مستودع GIT متزامن تلقائيا مع SVN:

$ subgit configure $SVN_REPOS
# Adjust $SVN_REPOS/conf/subgit.conf to specify branches, tags and other options;
# Adjust $SVN_REPOS/conf/authors.txt to specify git & svn authors mapping
$ subgit install $SVN_REPOS
...
$ INSTALLATION SUCCESSFUL

يقوم Subgit بتثبيت خطافات مرحلة ما قبل الالتزام والارتباك في مستودع التخريب، والاحتلال المسبق والسنانير بعد التلقي في مستودع GIT. ونتيجة لذلك تترجم على الفور التعديلات الواردة من SVN وجيط جيت. بعد أن يستخدم مطورو التثبيت الفرعي أي عميل GIT لاستنساخ وتعمل مع مستودع GIT.

الفرع الفرعي لا يعتمد على GIT-SVN، ويستخدم محرك الترجمة الخاص به قد طور فريقنا. مزيد من التفاصيل حول هذا قد تجد في الفرعية مقابل git-svn مقارنة. الوثائق العامة بشأن الفرعية متاح هنا.

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

الفرعية هو منتج تجاري. إنه مجاني للمصدر المفتوح والمشروع الأكاديمي وكذلك للمشاريع التي تصل إلى 10 ملتتية.

إخلاء المسئولية: أنا أحد مطوري الفرعية.

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

واحدة من المشاكل التي أدركها مع GIT-SVN هي أنها تخزن معرف GIT-SVN في تعليق الالتزام؛ نظرا لأن هذا يعيد كتابة هذا الالتزام، فإنه يغيره SHA1، لذلك لا يمكنك دفعه في أي مكان سيقوم فيه الناس بمشاركةها.

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

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