6

私はgitsvnリポジトリを持っています。ここには複数のリリースブランチがあります。私は新しいリリースを準備していて、その一環として、以前のリリースから「git rebase」を実行して、マージされていない変更をプルすることにしました。

だから私は自分の支店を設立しました...

git branch new_release remotes/svn-branches/new_release
git branch old_release remotes/svn-branches/old_release

そして、私はリベースをしました...

git checkout new_release
git rebase old_release
# watch it pull a bunch of commits
git svn dcommit
    Committing to https://svn.mysvn.net/repo/releases/old_release ...

「svndcommit」を実行した後、私はズボンをほとんど叩きました。それはSubversionで私の古いリリースブランチをホースで止めていました!

リベースを行った結果、リモートトラッキングブランチが変更されたのはなぜですか?

自分が陥った状況を修正するにはどうすればよいですか?

編集:さて、私は自分自身を抜け出すために私は次のことができると信じています:http ://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html#svn.branchmerge.basicmerging.undo

old_releaseにプルされたnew_releaseブランチにあったコミットはほんの一握りなので、SVNリポジトリで個別に手動で元に戻すことができます。私はまだここで何が起こったのか混乱しています。

EDITx2:はい、確認するためのいくつかの手順があります。

  1. SVNブランチにリモートで追跡する2つのgitブランチを設定します
  2. ブランチの1つをチェックしてください
  3. 実行git svn infoして、URLがSVNの正しい場所を指していることを確認します
  4. 走るgit rebase <other_branch>
  5. もう一度実行git svn infoして、SVN内の他のブランチの場所を指すように変更されたURLを確認します
4

1 に答える 1

9

git-svnの操作中によくある間違いをしたようです。

git-svnには「ブランチの追跡」のようなものはありません。「git-svn-id:」署名付きの最初のコミットが満たされるまで、最初の親の履歴によって常にdcommitするブランチのURLを決定します。この署名の近くのURLは、コミットがプッシュされるURLです。ただし、二重のチェックがあることに注意してください。署名の近くのURLとリビジョンは、.git / svn / refsディレクトリ内のデータ構造と比較され、URLとリビジョンがそれらと矛盾するかどうか(リベースはそれらに触れないため、リベースされたコミットに当てはまります)構造)、それは考慮されません。したがって、古いブランチURLは、リベースされなかったコミットの最初のURLでした。

純粋なGitエクスペリエンスが必要な場合は、git-svnの代わりにSubGitを試してみてください。2.0以降では、同期と同時実行性に注意しながら、SVNリポジトリの書き込み可能な純粋なGitミラーを作成できます。走る

$ subgit configure --svn-url <SVNURL> project.git
$ #adjust projectX.git/subgit/{config,authors.txt,passwd} 
$ subgit install project.git
$ git clone project.git project/

インストール後、通常のGitリポジトリとして使用できます。したがって、あなたの例では、次のように実行します。

$ git checkout new_release
$ git rebase old_release
$ git push origin new_release
于 2012-12-19T17:10:16.493 に答える