0

「git-svn で SVN ブランチを操作するにはどうすればよいですか」という質問を十数回読んだに違いありませんが、自分に何が起こっているのかについて説明されているものを見たことがありません。私は単純なマージを試みています:

(master)% git co -b refac_merge
(refac_merge)% git svn dcommit -n
  Committing to (URL)/trunk
(refac_merge)% git merge remotes/refactor
(refac_merge)% git svn dcommit -n
  Committing to (URL)/branches/refactor # <-- WTF!

似ているように聞こえる質問を見つけましたが、答えは実際にはそれを修正する方法を教えてくれません。はい、SVNトランクを追跡するローカルブランチがマージ後にSVNトランクを追跡し続けることをgit-svnに伝えるにはどうすればよいですか?

4

1 に答える 1

0

自分の行動が、これまでに見た他の質問と異なる理由がわかったかもしれません。どうやら、リモート ブランチが作成された時点からトランク (マスター) が変更されていないことが重要です。これは、履歴が事実上すでに線形であることを意味します。私のマージはすべて FF でした。

マスターをチェックアウトし、些細な変更をコミットしてから、ローカルrefac_mergeブランチをチェックアウトgit rebase masterすると、同じメッセージでまったく新しい一連のコミットが作成されますが、ハッシュは異なります (それらは現在ではなく、些細な変更コミットの子孫であるため)。分岐点の前の最後のトランク コミット)。これでgit svn dcommit -n、SVN トランクにプッシュすることが正しく表示されます。

もちろん、これにより、非常に醜い git リビジョン ログが残ります。たぶん、「両方の長所」の修正がありますか?

于 2013-01-15T11:01:53.597 に答える