1

オプションを使用してgit-svnでチェックアウトしたSVNリポジトリがあり--stdlayoutます(その時点では、リポジトリは空でした)。

その後、しばらくの間マスターブランチに取り組みました。を使用git svn dcommitすると、変更をsvn-commitして必要に応じて変更しhttps://my.host/repo/trunkます。

ある時点で、gitを使用して「arithmetics」という名前のブランチを作成しました。後で私もsvnでそのブランチを作成したかったので、Webサイトで提案されているようにgit svn branch arithmeticsaを実行しました。非推奨になることgit branch --set-upstream arithmetics remotes/arithmeticsについての警告を受けたので、これが問題が発生した場所だと思います。--set-upstream

を呼び出すときgit svn dcommit、それはコミットしhttps://my.host/repo/branches/arithmeticsます、これまでのところ良いです。dcommitしかし、ブランチをマスターにマージしようとすると、gitリポジトリで現在チェックアウトされているブランチに関係なく、そのブランチにコミットすることに気付きました。

svnから新しいクローンを作成し、そこでブランチをマスターにマージしてみました。trunkまた、で明示的にチェックアウトしてからgit checkout -b local/trunk remotes/trunk、ブランチをそのブランチにマージしてから、を試しましたgit svn dcommit。常にブランチに再度コミットします。

どうすればこれを修正できますか?

PS:私git rebaseが読んだように、merge-commitsはgit-svnで問題があったので、それらのどれも持っていません。

4

1 に答える 1

2

Git と SVN ではブランチの概念がまったく異なるため、 git ブランチを SVN リポジトリにコミットすることはできません。git とマージしてから dcommit を呼び出すと、履歴が線形化され (リベースとまったく同じ)、現在チェックアウトされているブランチにプッシュされます。

のマンページの重要な部分は次のgit svnとおりです。

マージ追跡git
svn は、標準レイアウトを採用しているリポジトリのコピー履歴 (ブランチとタグを含む) を追跡できますが、git 内で発生したマージ履歴をアップストリームの SVN ユーザーに表示することはまだできません。したがって、SVN との互換性を容易にするために、履歴を git 内で可能な限り線形に保つことをお勧めします (以下の警告セクションを参照してください)。

また、警告セクションには、問題専用の段落があります。

Subversion ユーザーは作成したマージを見ることができないため、dcommit する予定のブランチで git merge または git pull を実行することはお勧めしません。さらに、SVN ブランチのミラーである git ブランチからマージまたはプルすると、dcommit が間違ったブランチにコミットする可能性があります。

マージする場合は、次のルールに注意してください: git svn dcommit は、で指定された SVN コミットの上にコミットしようとします。

git log --grep=^git-svn-id: --first-parent -1
于 2013-01-05T15:01:27.753 に答える