В основном, когда я хочу совершить две отдельные изменения в том же файле, что и в результате операции git add --patch <file>
, git svn rebase позже набрасывает 1-2 конфликта при поступлении второго при использовании git add
для второго изменения.Проблема git-svn с git add --patch, приводящая к конфликтам
поэтому я в основном делаю это (я на главной ветви и принес репозиторий SVN):
git checkout -b feature
... make two unrelated changes to file test.txt...
git add --patch test.txt
... add first change but ignore second one
git commit -m "change1"
git stash
git checkout master
git merge feature
git svn rebase
git svn dcommit
git checkout feature
git stash apply
Теперь здесь есть два способа сделать это, сначала один, который работает:
git add --patch test.txt
... select everything (which is the second change in this case)
git commit -m "change 2"
git checkout master
git merge feature
git svn rebase
git svn dcommit
вот тот, который не работает:
git add test.txt #notice there's no --patch
git commit -m "change 2"
git checkout master
git merge feature
git svn rebase #yields a conflict
Так почему же, что при использовании git add --patch
для второго изменения, я могу передать в svn-репозиторий без проблем, но когда вы просто используете git add
для второго изменения, это приводит к конфликту? Я новичок в git, так что это может быть глупый вопрос, но, как я вижу, обе команды должны делать то же самое.
http://andy.delcambre.com/2008/03/04/git-svn-workflow.html Я после этого учебника (я довольно новый мерзавцу), и он говорит, что это не рекомендуется работать в мастер-ветке. Я попробовал это на хозяине (не совсем так, как я хочу быть двумя различными rebase/dcommit для svn), и он работал без проблем. Не могли бы вы объяснить разницу между svn и git merge для меня, это было бы очень полезно? – Zenon
@ Zenon: я не понимаю ваши »Я хочу быть двумя разными rebase/dcommit для svn«? вы можете уточнить? – knittl
oh Я имел в виду, что я совершил первое изменение -> svn rebase & svn dcommit, затем stash применил второе изменение назад и снова svn rebase & svn dcommit. Я в основном делал все это как своего рода доказательство концепции. Например, я работаю над веткой в git, чтобы добавить некоторые новые вещи и просто взломать, некоторые из изменений не связаны. Позже я хочу проверить одну из вещей, которые я добавил в мастер, а затем на svn, а затем продолжить работу над другими изменениями в ветке git и отправить их позже, когда они будут сделаны. Таким образом, вам не придется беспокоиться об управлении источником во время кодирования. – Zenon