git-svn: Как мне избежать коммитов 'Merge branch <branchname>'? - PullRequest
4 голосов
/ 29 августа 2011

Это мой текущий рабочий процесс git-svn:

git checkout -b feature master
# hack commit hack commit
git checkout master
git svn rebase
git merge feature
git svn dcommit

Обычно он работает нормально, git воспроизводит в транке все коммиты из локальной ветки, и единственными «потерянными данными» являются исходные коммиты.временные метки, ничего страшного.

Но похоже, что сегодня в слиянии и dcommit было что-то другое, из-за чего сообщение о фиксации в репозитории SVN стало просто «функцией ветвления слияния», возможно, потому, что эта функциябыло «меньше», только с 2 или 3 коммитами.

Как можно избежать этого и обеспечить повторное воспроизведение всех коммитов и сообщений коммитов из git в репозитории SVN?

Ответы [ 2 ]

1 голос
/ 30 августа 2011

Этот комментарий должен быть результатом dcommit git merge, как показано в " Является ли git-svn dcommit после слияния в git опасным? ":

(master)$> git log --graph --oneline --decorate
* 56a779b (work, master) Merge branch 'work'
|\  
| * af6f7ae msg 3
| * 8750643 msg 2
| * 08464ae msg 1
|/  
* 21e20fa (git-svn) last svn commit

В другихДругими словами, если бы эти три коммита "msgx" были сделаны непосредственно на master, они были бы воспроизведены (с их оригинальными комментариями) на стороне svn.
Но здесь, только результирующий коммит слияния воспроизводится, с«общий» комментарий к нему.

0 голосов
/ 25 октября 2011

Сначала вам нужно будет сделать ребаз из ветки функций:

git checkout feature
git rebase master

Это гарантирует, что при слиянии с вашим мастером вы получаете только ускоренное ускорение, а не фактическое слияние.

Мой поток обычно больше похож на этот:

git checkout master
git svn rebase
git checkout feature
<hack...hack...hack>
git commit
git rebase master
git checkout master
git merge feature

Я просто проверяю sbn rebase, а затем перебазирую все мои ветви функций, чтобы все оставалось красивым и линейным, как это нравится SVN.

Кроме того, если вы не знаете об этом, есть опция git svn dcommit --dry-run. Я всегда использую --dry-run и подсчитываю количество коммитов, чтобы удостовериться, что git-svn совершит то, что я ожидаю.

...