2012-04-19 12 views
16

短い質問:svn up -r r1130のgit-svnに相当するものは、番号付きコミット(svn番号付き)のみに更新するものは何ですか?svn rebaseを特定のsvnリビジョンにgitできますか? (svn up -r ...と同様)

私はgit-svnを使用しているので、gitを使用して、私のチームのsvnリポジトリのローカルブランチを管理できます。私は、特定のハードウェア設定で動作するようにハックアップするソフトウェアのバージョンを持っています。私は最後にそれを使っていたので、svn repoはこの作業のために安定した、良いポイントを超えて前進しました。私は、安定したコミットを表す番号の付いたリビジョンにローカルブランチを更新したいと思います。私はsvn up -r r1130とsvnでこれを行うことができますが、私はgitが好きです。

私はこれを過去にどのようにして行ったのか、自分自身と、最良の方法を見つけようとしているヘルプページを探していることを忘れています。おそらく、別の言葉Q & Aがありますか?

クリーンなツリーで古いリビジョンをチェックアウトするのは簡単ですが、ツリーの上にコミットを載せているときは、その上に作業を再生する「巻き戻しヘッド...」という部分私はいつも愛するということは、私の変更が追加される前に、私がツリーのポイントに行くことを意味します!

今のところ、私はgit svn rebaseに行き、対話的にrebaseを実行して、望ましくないコミットを取り消しますが、これを実行するのがベストか、あるいは良い方法であると考えています。

答えて

18

私はrebaseを好むので、git-svnはdcommitの前に変更をリベースする必要があるためです。代わりにこれを試してみてください:

git checkout `git svn find-rev r1241` # Go to the svn version of interest 
git checkout -b master_r1241   # Create a new brach matching it 
git checkout hwTesting     # Merge previously created changes 
git rebase master_r1241    # rebase on top of not quite up-to-date master branch 

あなたはまた一歩でこれを行うことができます:(物事が恐ろしく間違って行く場合は、必ずREFLOGやrebase --abortを使用して元に戻すことができ)。

git checkout hwTesting     # Checkout feature branch 
git rebase `git svn find-rev r1241` # rebase on top of not quite up-to-date master branch 
+0

私は最終的にこれを試してみる機会があり、これの一歩版はまさに私が探していたものです。ありがとう! – sage

1

1つのステップでそれを行う方法はないようです。ただし、指定されたsvnリビジョン番号に対して、対応するgitコミットIDを簡単に見つけることができます。これを試してください:

git svn find-rev rN 

ここで、Nは必要なリビジョン番号です。その後、git checkoutを使用して履歴内の特定のポイントをチェックアウトします。

+0

これは、一般的に役に立つ便利なコマンドですが、私はその枝rebase' svnの新しいコミットとI 'gitのを持っている枝にいるならば、それはSVNコミットの上に私の新しいコミットを再生します問題のあなたのコマンドは*未変更の* svn commitをチェックアウトします。おそらく私はこれを行い、その時点で新しいブランチを作成し、最後にこのブランチを自分のブランチにマージすることができますか? – sage

+0

良い点...私は習慣的に私はsvn rebaseを追跡するブランチだけでgitする傾向があると思います...そうすることで、私のフィーチャーブランチは、メインラインと統合する準備が整うまで元に戻すことができます。私はあなたの質問を更新する方法を尋ねた後、新しいコミットの特定のリビジョンに移動します。 –

0

私は参考にしておきますが、受け入れられた答えには言及されています。しかし、1ライナーのリベースオプションを使用してください。


これは私が今行っていることです。私はr1241する(質問で述べた)R1130からアップグレードしています。この時間:

git checkout `git svn find-rev r1241` # Go to the svn version of interest 
git checkout -b hwTesting_r1241  # Create a new brach matching it 
git merge hwTesting_r1130    # Merge previously created changes 

は、これは主に私が欲しいものを私に与えますが、それは別のブランチに私が更新するたびに生成します。 gitにマスターのコミットだけをマージしてgit svn find-rev r1241によって返されたものを含むようにする方法があるようです。