Почему git svn dcommit теряет историю коммитов слияния для локальных веток? - PullRequest
18 голосов
/ 08 января 2009

У меня есть локальный репозиторий git, созданный с помощью git svn clone. Я делаю локальную ветку, делаю некоторые изменения, переключаюсь обратно на master, git svn rebase и, если все хорошо, я объединяю свою ветку обратно с master. Тогда дерево выглядит примерно так:

альтернативный текст http://img.skitch.com/20090108-cjguu3hcci9x2k17mcftamw8f1.jpg

Иногда, позже, когда я git svn rebase снова получаю некоторые удаленные изменения, теряется тот факт, что a_branch был объединен с основной линией, и дерево выглядит так:

альтернативный текст http://img.skitch.com/20090108-kn3bn1qgi5ijw8ja5ijkd75pa3.jpg

Почему это? Могу ли я остановить это? Есть ли простой способ сказать, что ветка была объединена, или я должен удалить свои ветви, когда я закончу, чтобы я не забывал, что было и не было объединено?

Ответы [ 2 ]

22 голосов
/ 09 января 2009

Страница man git-svn рекомендует не использовать слияние. Это один побочный эффект. Поскольку вы перебираете ветку (git svn rebase немного похожа на «git pull --rebase»), она эффективно переписывает историю. Он может отбрасывать любые локальные коммиты, которые уже находятся в восходящем направлении в subversion, такие как слияние, и сохранять только те коммиты, которые действительно существуют в репозитории svn. Поскольку тривиальный коммит слияния локальной ветви не имеет эквивалента в SVN, вы фиксируете только «реальные» изменения, поэтому это единственные изменения, которые можно увидеть в вашей новой перебазированной основной ветке.

В идеале ваша локальная ветвь должна слиться только с ускоренной перемоткой, т. Е. Слияние не генерируется. Если это не так, то вам следует рассмотреть возможность перестановки вашей локальной ветки на master вместо ее слияния. Это полностью исключает создание коммитов слияния.

0 голосов
/ 08 января 2009

Потому что вы проходите через SVN. При этом вы потеряете много информации (например, вы потеряете и автора).

...