私の典型的な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
この時点で、1つ以上のコミットが先にある同じコミットを指すブランチがありmaster
ます。それ以降のすべては、1つの線形の歴史の中にあります。story-xyz
remotes/trunk
remotes/trunk
last svn commit [remotes/trunk] <--- work <--- more work [master, story-xyz]
次に実行します
git svn dcommit
私は、との間のコミットがSubversionリビジョンになることを期待しremotes/trunk
、master
最終的には、の単一の線形履歴になり、remotes/trunk
すべてが最新のリビジョンを指しているようになります。master
story-xyz
last svn commit <--- work <--- more work [master, story-xyz, remotes/trunk]
私のSubversionリビジョンはうまくいきますが、最終的には2分岐構造になります。ブランチの一般的なルートは、コミットする前のSubversionHEADです。両方のブランチには、同じ差分が含まれているという意味で、同じ一連のコミットが含まれています。ブランチstory-xyz
は、一方のブランチの先頭にあり、もう一方のブランチにremotes/trunk
ありmaster
ます。
last svn commit <--- work <--- more work [master, remotes/trunk]
|
\- work <--- more work [story-xyz]
実行前に持っていたgitcommitはgit svn dcommit
、下位ブランチ(story-xyz
)にあり、git commitメッセージ、gitユーザー名と電子メール、およびgitcommitタイムスタンプが含まれています。上位ブランチのコミットは新しいgitコミットです。彼らは私のSubversionユーザー名、私が実行したときのタイムスタンプを使用しdcommit
、コミットメッセージにはgit-svn-id
フィールドが追加されています。
これで大丈夫です。作業を続けることができます。問題は、マージされgitk
ていないブランチのように見えるものを調べて確認することstory-xyz
です。にマージしたストーリーブランチと、マージしていないストーリーブランチの違いを区別するのはかなり難しいmaster
です。それを見つける最も明白な方法は、重複したコミットメッセージです。ブランチを削除することはできstory-xyz
ますが、gitを適切に使用しておらず、履歴の一部が失われているように感じます。
私はgit-svn
これをやめる何かを逃していますか?それとも、これはSubversionとの対話がgitのパワーと自由を薄める方法の1つにすぎませんか?