Мой типичный рабочий процесс git-svn:
git checkout -b story-xyz
git commit -a -m "work"
git commit -a -m "more work"
git checkout master
git svn fetch
git merge remotes/trunk
git checkout story-xyz
git rebase master (sometimes with -i)
git checkout master
git merge story-xyz
На данный момент мои ветви master
и story-xyz
указывают на один и тот же коммит, один или несколько коммитов перед remotes/trunk
. Все, начиная с remotes/trunk
, находится в одной линейной истории.
last svn commit [remotes/trunk] <--- work <--- more work [master, story-xyz]
Я тогда бегу
git svn dcommit
Я ожидал, что коммиты между remotes/trunk
и master
станут ревизиями Subversion и в итоге получат одну линейную историю, в которой remotes/trunk
, master
и story-xyz
все указывают на последнюю ревизию, как :
last svn commit <--- work <--- more work [master, story-xyz, remotes/trunk]
Мои ревизии Subversion проходят нормально, но в итоге я получаю двухразветвленную структуру. Общий корень ветки - это Subversion HEAD до того, как я его зафиксировал. Обе ветви содержат одинаковые серии коммитов в том смысле, что они содержат одинаковые различия. Ветвь story-xyz
находится во главе одной ветви, remotes/trunk
и master
в другой:
last svn commit <--- work <--- more work [master, remotes/trunk]
|
\- work <--- more work [story-xyz]
Git коммиты, которые у меня были до запуска git svn dcommit
, находятся в нижней ветви (story-xyz
), с моими сообщениями git commit, именем пользователя git и электронной почтой, а также временными метками git commit. Коммиты на верхней ветке - это новые коммиты git. Они используют мое имя пользователя Subversion, отметку времени, когда я запустил dcommit
, и к сообщениям о фиксации добавлено поле git-svn-id
.
Все в порядке, и я могу продолжать работать. Проблема в том, что я смотрю в gitk
и вижу что-то похожее на неотправленную ветку story-xyz
. Довольно сложно отличить ветвь истории, которую я слил обратно в master
, и ветвь, которой я не сделал. Самый очевидный способ определить это - дублировать сообщения коммита. Я мог бы удалить ветку story-xyz
, но мне кажется, что я не использую git должным образом, и я потерял часть своей истории.
Я что-то упускаю, что остановит git-svn
от этого? Или это только один из способов, которыми взаимодействие с Subversion ослабляет силу и свободу мерзавца?