8

私の典型的な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-xyzremotes/trunkremotes/trunk

last svn commit [remotes/trunk] <--- work <--- more work [master, story-xyz]

次に実行します

git svn dcommit

私は、との間のコミットがSubversionリビジョンになることを期待しremotes/trunkmaster最終的には、の単一の線形履歴になり、remotes/trunkすべてが最新のリビジョンを指しているようになります。masterstory-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つにすぎませんか?

4

1 に答える 1

4

私はあなたが本当に何かを逃しているとは思わない。ただし、不要な作業を行っている可能性があります。この場合、「より多くの作業」コミットへの2つのポインターがあり、そのうちの1つを移動するようにgit-svnに要求しています。もう1つはまだそのままです。

masterブランチは本当に必要ありません。Git-svnは、どのブランチをコミットしているのかを気にしません。IIRC、それは現在のコミットの祖先の中で見つけることができる最初のsvn-remoteを使用します。

ワークフローの別のバージョンを提供します。

git checkout -b story-xyz remotes/trunk
git commit -a -m "work"
git commit -a -m "more work"
git svn fetch
git rebase remotes/trunk (with -i, perhaps)
git svn dcommit

これにより、余分なブランチのないツリーが得られるはずです。ただし、早送りマージには注意する必要があります。

于 2009-06-01T19:12:25.687 に答える