الجمع بين المحلية بوابة يرتكب في واحدة ارتكاب لGIT-إس

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

  •  05-07-2019
  •  | 
  •  

سؤال

وحاليا، عند تشغيل git svn dcommit بوابة يخلق منفصلة ارتكاب في SVN لكل المحلية أن تلزم لقد قدمت منذ المزامنة الأخيرة مع SVN. هل هناك أي طريقة لdcommit الجمع بين بدل كل ما عندي من يرتكب المحلية الأخيرة في واحدة ارتكاب لSVN؟

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

المحلول

git rebase remotes/trunk --interactive 

يجب أن تجلب لك إلى القائمة حيث يمكنك اختيار يرتكب أو الاسكواش كل منهم إلى 1 الالتزام من أجل تجنب تلويث مستودع إس الخاص بك. هذا أمر جيد حقا (ولكن قصيرة) مورد على العمل مع GIT-إس.

نصائح أخرى

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

git tag local # create a temporary tag
git reset --hard trunk
git merge --squash local
git commit # write your single commit message here
git svn dcommit
git tag -d local # delete the temporary tag named local

وبدلا من استخدام علامة المؤقتة التي يمكن أيضا أن مجرد استخدام reflog (أي استخدام master@{1} في مكان local)

عند أعمل مع بوابة-إس وترغب في سلسلة من بوابة تلتزم تظهر باعتبارها واحدة ارتكابها، وأنا أعمل على فرع الموضوع ومن ثم القيام merge غير سريعة إلى الأمام إلى الرئيسي قبل dcommit جي.

أولا، rebase فرعك ضد إس والتأكد الرئيسي المحلي هو ما يصل إلى تاريخ:

git svn rebase && git push . remotes/trunk:master

وبعد ذلك التحول إلى سيد، ودمج وdcommit:

git checkout master
git merge <branch> --no-ff -m "Message you want in svn"
git svn dcommit

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

                                       +--- Merge commit
                                       V
svn trunk  *---*---*-------------------*--- --- ---
                    \                 /
topic branch         *---*---*---*---*

وهناك طريقة أبسط يمكن أن يكون (إذا كان لديك عدة تلزم تراكمت على النظام المحلي الخاص بك):

git reset <hash tag of commit till which u need to combine>
git commit -am "your message"  // This will create one clubbed commit of all the commit till the hash tag used.

وهذا عمل بالنسبة لي - عدة يرتكب ممرود في واحدة تلزم ثم dcommitted لإس:

HTTP: //www.gitready. كوم / المتقدمة / 2009/02/10 / سحق-يرتكب-مع rebase.html

والذي لا يعمل بالنسبة لي. يمكنني استخدام merge --no-ff --no-commit ولكن بعد ارتكابها، وحصلت على:

svntrunk                        54f35e4 [trunk: ahead 336] release 1

وdcommitting إلى trunkwill ارتكاب كل يرتكب 336.

وإعادة ووضع علامة و سحق كما هو موضح في الجواب رقم 2: <لأ href = "https://stackoverflow.com/questions/1408381/combine-local-git-commits-into-one-commit-with-git -svn / 1408404 # 1408404 "> الجمع بين المحلية بوابة يرتكب في واحدة ارتكاب مقابل إس بوابة العمل، ولكن على التالي" دمج "سيكون لديك بعض المتاعب للحصول على كل يرتكب معا مرة أخرى!

وواحد فقط أن يعمل بالنسبة لي:

git checkout -tb svntrunk remotes/trunk
git merge --no-commit --squash master

للحصول على كل يرتكب من سيد إلى إس دون فقدان تاريخ لمستقبل الاندماج مع نفس الأمر

~ مارسيل

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