كيف يمكنني استخدام اثنين إس مشاريع المقابلة git-svn الفروع مع عامل واحد الدليل ؟

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

  •  03-07-2019
  •  | 
  •  

سؤال

أنا جديدة نسبيا بوابة, ولكن أريد أن محاولة إعطائها (مقابل SVN و بازار).

يمكن لأي شخص أن يوصي لي سير العمل لحالة مشابهة لما يلي:

  • 1 SVN الريبو مع عدة مشاريع
  • 1 نسخة العمل "src"

أما تدرين أن في "src" أنا بحاجة إلى الخروج المشروع أو في بعض الأحيان المشروع B.كل مشاريع عدة فروع.

الآن أنا جعلت 2 بوابة استنساخ إس الريبو واحد لكل مشروع.(انا نفضل --العارية repos, ولكنه لا يعمل مع git svn clone)

ثم قمت بوابة الريبو في "src" ، git remote add projA ..a_repo_git, "git remote add projB ..b_repo_git".

الآن أستطيع أن أرى كل منهم من "src" باستخدام "بوابة البعيد" ، أستطيع أن أرى فروعها مع "بوابة البعيد تظهر projA"

و الآن في ورطة..

  • كيف يمكنني الحصول على "src" أي من الفروع في projA/projB ?
  • كيف يمكنني تعديل عليها ، ومن ثم تكون قادرة على دفع لهم مرة أخرى (أولا git_repos ، أو مباشرة إلى إس الريبو)?
  • هذا "العمل" حسنا, أو هل لديك فكرة أفضل ؟

لقد حاولت في src: git checkout --track -b work_branch projA branch_in_A و بعد بعض fiddleing مع "جلب" تمكنت من الحصول على الأشياء.ولكن إذا كان لدي مشاكل في دفع مرة أخرى إلى a_repo_git, ثم إلى SVN.كان معظمهم من التجربة والخطأ.

أنا يجب أن أعترف, أنا لا تزال لديها مشاكل مع الفروع البعيدة!(و لا تضيع عندما لا بد لي من استخدام "origin local_branch:origin_branch"أو "origin origin_branch:local_branch"،أو "origin origin_branch"أو "origin/origin_branch"!العودة إلى بوابة دليل على بعض في القراءة.)

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

المحلول

لم يتم تحديث هذا السؤال ، لأنه في الأيام القليلة الماضية كنت قادرة على العمل جميلة حقا من السهل مع مساعدة من الريبو :)

هنا هو ما فعلته في النهاية:

Init اثنين إس اتفاقيات إعادة الشراء في نفس الدليل.(أنا لا يمكن أن تذكر في هذا الوقت ، ولكن قد يكون من الممكن أن "بوابة التهيئة" تم في نفس dir قبل:

mkdir src && cd src
(not sure about this: git init)
git svn init --stdlayout --prefix=projA/ -RprojA file:///path/to/svn/repo/A
git svn init --stdlayout --prefix=projB/ -RprojB file:///path/to/svn/repo/B

إن "--stdlayout" يعني أن إس اتفاقيات إعادة الشراء في شكل موحد ، مع الجذع والفروع الكلمات على نفس المستوى.

إن "بادئة" يستخدم فروع الاسم.عندما نفعل "بوابة فرع" ، كل SVN فروع من المشروع قد البادئة "projA" (السابق:projA/branch_name_of_A).نفس الشيء بالنسبة B.

الخيار-R يحدد اسم إس الريبو ، الداخل من بوابة الريبو (إنه اسم نستخدمها مع بوابة عند الإشارة إلى إس مستودع/المشروع)

File:///path هو المسار إلى إس الريبو ، وأن المشروع داخل الريبو ، في هذه الحالة.يمكنني استخدام "file://" انا مسطحة الملف الريبو ، مع أي ملقم.أنا متأكد من أنه عمل طيب مع http:// أيضا عن خادم إس.

بعد هذه الخطوة من باب الفضول لدي نظرة على ملف src/.بوابة/config.الأمرين أعلاه إنشاء عدة "إس-جهاز التحكم عن بعد" أقسام واحد لكل مشروع (الخيار-R) ، عام واحد يسمى "إس".لقد تعديل إدخالات, لذلك سيكون هناك إشارات فقط إلى المشاريع.كل إشارة قد إدخالات الريبو المسار (الجلب) و العلامات/فروع/الجذع.إذا نظرتم الملف, فسوف نفهم ما يحتاج إلى تغيير.

بعد هذا, لقد جلب محتويات كل المشروع باستخدام

git svn fetch projA #the contents of project A repo are downloaded
git svn fetch projB #the contents of project B repo are downloaded

الآن runnig "بوابة فرع" عرض جميع فروع من اتفاقيات إعادة الشراء ، الفرع الرئيسي (المحلية)."بوابة فرع -r" لم يتم عرض أي الفروع ؛ ربما لأنهم "إس-جهاز التحكم عن بعد" وليس "عن بعد"

الحالي "سيد" فرع لافتا إلى جذع المشروع الثاني.لقد قررت التخلص منه لأنه قد يسبب مشاكل عند التبديل من مشروع إلى آخر.

لقد خلق فرعين جديدين إلى نقطة على جذوع من كل مشروع ، ثم إزالة "سيد" فرع:

git checkout -b master_project_A projA/trunk
git checkout -b master_project_B projB/trunk
git branch -D master

والآن "سير العمل";أن العمل على المشروع:

git checkout master_project_A #switch to project A
git svn rebase #check for any updates on SVN repo
git checkout -b work_on_A master_project_A #create a branch starting from the master of project A

work work work on work_on_A; commit, etc

git checkout master_project_A #go back to master of project A
git svn rebase #check again for any update on SVN repo
git checkout work_on_A #go back to the work branch
git rebase master_project_A #update branch with any changes from the master of project A
git checkout master_project_A #go back to the master of project A
git merge work_on_A #merge to the master of project A the changes from the work branch
git svn dcommit #commit changes to the SVN repo, in trunk, because master_project_A was pointing to its trunk

إذا كنت ترغب في الخروج من القائمة فرع من إس, أستطيع أن أفعل ذلك مع:

git checkout -b work_on_branch projA/branch_name

work work work

git svn rebase #update any changes from projA/branch_name
git svn dcommit #commit updates back to the branch in the SVN repo

المشروع ب أنني يمكن أن تفعل نفس الأشياء.في النهاية, أنا يمكن أن يكون محتويات المشروع A أو B في نفس dir "src", والوصول إلى كل المشاريع على SVN مستودع من نفس بوابة الريبو!:D

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

أيضا ، قد يكون من المفيد أن تعرف الأمر "إعادة تعيين" ("بوابة إعادة تعيين-من الصعب projPrefix/فرع") ولكن كسرت عدد قليل من الأشياء استخدامه ، لذلك قد يكون من الأفضل أن يترك هذا لبعض الوقت.

آمل أن يساعد هذا شخص!

الهتافات ، اليكس

نصائح أخرى

دعونا نفكر أولاً في الحالة الأبسط المتمثلة في اتفاقية ريبو عن بعد وريبو محلي واحد.

أ remote في الريبو المحلي يعمل "فقط" كمرجع إلى الريبو الآخر.يمكنك استخدام fetch لاسترداد الكائنات البعيدة إلى متجرك المحلي:

git remote add upstream git://...
git fetch upstream

الان جميع الفروع من upstream يمكن الرجوع إليها محليًا والعمل عليها باستخدام upstream/branchname.للعمل على فرع بعيد، يجب عليك دائمًا إنشاء فرع محلي يتتبع الفرع البعيد:

git checkout -b new_local_branchname upstream/branchname

يمكنك الآن العمل محليًا والالتزام/الدمج بقدر ما تريد.كخطوة أخيرة يمكنك push قمت بالتغيير مرة أخرى إلى المستودع المركزي.الشيء المهم هو أن AFAIK push يمكن فقط إجراء عمليات الدمج السريع، أي تحميل التغييرات وتعيين الرأس الجديد.ولذلك يتعين عليك إعداد فرعك المحلي بحيث تبدأ التغييرات المحلية على طرف الفرع البعيد.يمكنك استخدام rebase لتحقيق ذلك أو تجنب تغيير المستودع المركزي أثناء عملك محليًا.

يصف هذا سير العمل البسيط بين مستودعين.الآن إلى الحالة المحددة مع SVN.

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

أخيرًا، سؤالك حول مشاريع متعددة في نفس الريبو.

لا يدعم Git عمليات السحب المتوازية لفروع متعددة في نفس الريبو.قد ترغب في النظر في وحدات فرعية لدمج اتفاقيات إعادة الشراء المتعددة.

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