2

私は最近git-svnを使用して、gitを介して古いsvnリポジトリを管理しています。

私は最近、次のように作成したブランチで作業しています。
git checkout -b local-branch svn-branch

それ以来、私はそのブランチで作業し、以下を使用してsvn-branchにコミットしました。
git svn dcommit

ローカルブランチをマスターにマージする時が来たので、私は次のことを試みました:
git checkout master
git merge local-branch

ここまでは順調ですね。今、私はマージをsubversionにコミットし直したいので、これを試してみます:
git svn dcommit

しかし、今、私のマスターは、私が期待していたようにトランクではなく、svn-branchブランチにコミットしています。私が見逃したものはありますか、またはこの種のマージは、このようなsvnブランチ間でマージすることをお勧めしませんか?

ちなみに、私は代わりにsvnを介してマージを行いましたが、svnをできるだけ使用する必要がないようにしたいと思います。これを処理するための好ましい方法は何ですか?

4

1 に答える 1

3

git svn dcommit常に、HEADの履歴の最初の親のコミットチェーンによって最新のgit-svn-id署名で指定されたURLへの変更を送信します。

マージは早送りされた(つまり、マスター参照はlocal-branch / svn-branchから到達可能だった)ので、マージコミットの作成ではなく、「gitmerge」によってローカルブランチに設定されただけだと思います。

Subversionには早送りマージなどの概念がないため、推奨事項として、常に「gitmerge」で--no-ffオプションを使用してください。(このオプション( )はconfig [merge.ff=trueでデフォルトとして設定できますが、Git<1.7.6の場合は"--no-ff"に設定できます]が、1つ以上使用すると、「gitpull」も早送りされなくなることに注意してください。リモート)branch.master.mergeoptions

また、SVNやgit-svnを回避するために、リポジトリサーバーにアクセスできる場合は、Subversionへの純粋なGit(git-svnではない)インターフェイスを提供するSubGitプロジェクトをご覧ください。SubGitの場合でも--no-ffオプションを強くお勧めします。これは、早送りマージ(および早送りリベース)を別のコミットからのブランチの削除および再作成と区別できないためです(これはすべてのGit <-> SVN変換に当てはまります)。道具)。

しかし、おそらく他の理由(私は他に何も知りません)が最新のコミットメッセージで(トランクURLの代わりに)ブランチURLで「git-svn-id」を引き起こしました。とにかく、マスターが正しいコミットを指していることを確認してください。

于 2012-09-26T16:28:03.303 に答える