Таким образом, я использую мерзавца и взаимодействую с svn repo.
У меня есть СОЕДИНИТЕЛЬНАЯ ЛИНИЯ svn, которая похожа на это:
A-B-C-D
И svn bug_fixes ответвление, которое отклоняется в фиксации B или C:
-c-d-e-f-g-h-i
Теперь я должен получить фиксации cdefghi, которые находятся в моем ответвлении svn назад в основное ответвление.
Я знаю, что мог просто сделать раздавленную фиксацию, давайте назовем ее СКВОШЕМ сквоша (который содержал бы cdefghi), но тогда кажется, что я должен был бы уничтожить bug_fixes, переходят и запускают новое ответвление для чистого продолжения.
Здесь: http://blog.red-bean.com/sussman/?p=92 они предлагают:
checkout
ответвление.
merge
изменения ведущего устройства в ответвление.
Checkout
ведущее устройство.
merge --reintegrate
изменения ответвления на ведущее устройство.
Продолжите разработку.
К сожалению, мерзавец-svn, кажется, не распознает, что любое "слияние - повторно интегрирует" команду для svn.
Таким образом, как я чисто делаю ответвление, и ведущее устройство имеют все фиксации, так, чтобы разработка на обоих могла продолжиться, с помощью команд мерзавца-svn's?
Раздел Предостережения в документации git-svn
предупреждает
Для простоты и взаимодействия с менее функциональной системой (SVN) рекомендуется, чтобы все
git svn
пользователиclone
,fetch
иdcommit
непосредственно с сервера SVN, избегая всехgit clone
/pull
/merge
/push
операции между репозиториями и ветвями git.
Автор дает рекомендацию:
Рекомендуемый метод обмена кодом между ветвями git и пользователями -
git format-patch
иgit am
, или простоdcommit
в репозиторий SVN.
Адаптация к вашей ситуации
git format-patch --stdout c^..i >my.patch
git reset --hard trunk
git am <my.patch
где c
и i
- подходящие идентификаторы для коммитов в вашей истории.
Официальная иерархия классов:
Существуют также некоторые диаграммы классов. Это действительно большой, вам нужен плоттер, чтобы напечатать это в размере, который является читаемым:
-121--4293860- Не будет ли это хорошим случаем для перегруппировки вашего локального материала ( < branchpoint >.. i
) на новый мастер, выбранный из SVN?
ОК, поэтому несколько подходов, которые я обнаружил:
git checkout your_branch
git rebase master
git checkout master
git merge your_branch
или
git checkout your_branch
git rebase master
git checkout master
git merge --squash your_branch
или
git checkout your_branch
git rebase master
git checkout master
git rebase -i your_branch
, а затем после всего этого.
git svn dcommit (to commit to master)
git branch -D your_branch
Затем (от SVN, потому что GIT-SVN не поддерживает удаление) Удалить ветку, и воссоздайте его из багажника и начните цикл снова и снова.
Если вы фиксируете слияние, оно автоматически разбивает его на 1 коммит. К сожалению, он не использует svn:mergeinfo или --reintegrate, как следовало бы, поэтому вы теряете связь с веткой, созданной с помощью 'git svn branch'.