Почему git svn dcommit теряет историю коммитов для локальных ветвей?
У меня есть локальный репозиторий git, созданный с помощью git svn clone
. Я делаю локальную ветвь, делаю некоторые изменения, переключаюсь обратно на мастер, git svn rebase
, и если все это хорошо, я объединять свою ветку обратно в мастер. Затем дерево выглядит примерно так:
alt text http://img.skitch.com/20090108-cjguu3hcci9x2k17mcftamw8f1.jpg
Иногда, позже, когда я git svn rebase
снова и получаю удаленные изменения, он теряет тот факт, что a_branch был объединен с основной линией, и дерево выглядит следующим образом:
alt text http://img.skitch.com/20090108-kn3bn1qgi5ijw8ja5ijkd75pa3.jpg
Почему? Могу ли я остановить его? Есть ли простой способ сказать, что ветка была объединена, или я должен удалить свои ветки, когда я закончил, поэтому я не забываю, что было и не было объединено?
Ответы
Ответ 1
Страница git -svn man рекомендует не использовать слияние. Это один побочный эффект. Поскольку вы восстанавливаете ветвь (git svn rebase немного похожа на git pull --rebase "), она эффективно перезаписывает историю. Он может выкинуть любые локальные коммиты, которые уже находятся в восходящем потоке в подрывной деятельности, такие как слияние, и сохранить только те коммиты, которые действительно существуют в репозитории svn. Так как тривиальное объединение слияния локальной ветки не имеет эквивалента в SVN, вы совершаете только" реальные" изменения, поэтому это единственные изменения, которые наблюдаются в вашей новой ветки главной ветки.
В идеале ваша локальная ветвь должна объединяться только с быстрой перемоткой вперед, т.е. не создается слияние. Если это не так, то вы должны подумать о том, чтобы переустановить свою локальную ветвь на мастер вместо ее слияния. Это позволяет полностью скрыть фиксацию слияния.
Ответ 2
Потому что вы проходите через svn. Когда вы это сделаете, вы потеряете много информации (например, вы потеряете автора).