Git を使用して SVN ブランチを操作するために必要なことをついに発見しました。私は以下のことを試しました (私が指定した場合を除く) ので、何かおかしいことや的外れなことをしない限り、Git から SVN へのコミットは問題なく動作するはずです。もちろん、問題が発生しても責任は負えません!私はさらなるコメント/発言を受け付けています。
標準レイアウトで SVN リポジトリのクローンを作成しない場合でも、Subversion で関連する SVN パスを指すリモートを構成する必要があります。
SVN ブランチのクローンを作成するには (SVN パスは、トランク、ブランチ、およびタグを含むルート パスを指している必要があります):
git svn clone -s http://myrepo.com c:/my/local/path
すでに SVN ブランチのクローンを持っている場合は、リモートを他の SVN ブランチに手動で追加する必要があります。これらを確認してください。
重要なのは、リモート ブランチを追跡しているローカル ブランチがあることです。
git checkout -b localbranch remotes/remote_branch
これで、そのローカル ブランチに対して commit できるようになり、完了するたびにトランクと同じようにこれを実行できます。
git svn fetch
git svn dcommit
その SVN ブランチが最終的に完了し、トランクにマージしたい場合は、次の操作を実行できます (そのブランチからすべてを取得し、マスターにリベースします)。
git checkout master
git merge localbranch
git rebase -i trunk (just save the message)
git svn fetch
git svn dcommit
必要に応じてスカッシュ マージを実行することもできます (これらの小さなチェックインをすべて実行したくない場合)。
git merge --squash localbranch
git svn fetch
git svn dcommit
実際の DCOMMIT を実行する前に予行演習を行って、すべてが正常であることを確認している可能性があります (宛先を含む)。
git svn dcommit -dry-run
ただし、マージの競合が予想される場合 (これは私が Web で読んだことですが、私はそれを試していないため、言及しているだけです)、git checkout master
上記の行の前に次のことを行ってください。これは、マージの競合などに対処するために使用する必要があるリモート ブランチを追跡しないローカル ブランチです。これが必要かどうかは別の話です。
git checkout -b merge_work master
git merge localbranch
git checkout master
git rebase merge_work
私は自分自身と、将来これを試してみたいと思うかもしれない他の人々のためにこれを書き留めています.