svnって真面目にブランチをマージしようとすると大変だよね。
というわけで。
(ざっと検索してみたけど、既出じゃないよねドキドキ)
準備
.svn* が無視リストに入ってる。
ここまでで察したら、あなたすごい鋭い。
ブランチ開始
.svnフォルダのバックアップを作っておくことがポイント。
ここまでで察したら、あなたとても鋭い。
さて、ではブランチを作りましょうか。
もちろんswitch込みで。
さらに、ブランチ側でread1st.txtを編集してみました。
そしておもむろにcommit
一方、trunk側では…
read1st.txtもdoc/memo.txtも編集されてます。
さらに、ブランチ運用の天敵・フォルダのリネームを添えて。
まずは、普通にマージしてみましょうか
祭り始まる。
手動で頑張れ。
そこで、偏屈で超手軽なマージ技
こちらは、先ほどブランチ側でcommitした後の状態。
.svn → .svn_branch
.svn_trunk → .svn
ってリネームすると…
ブランチ元のtrunkから未commitの状態になりました。
次に、trunk側の更新を反映するため、おもむろにupdate。
という具合に、trunk同士の競合解決とほぼ同様に処理できます。
さすがに、リネーム前のフォルダは消えちゃいますね…
今回の例ではブランチ側でdocフォルダを書き換えてないので
放っといてもいいのですが、もし書き換えてたらという仮定だと
その解決方法は? というわけで…
ブランチ側のdocフォルダをエクスポートしてきましょうか。
そして、docsフォルダに上書き。
ブランチ側のmemo.txtに書き変わって未commitの状態。
そしておもむろに…まだまだ。
ブランチ側の状態がtrunkでも有効か、検討しなきゃ。
今回の例ではtrunk側を採用することになるので、revertで対応。
このあたりはケースバイケースなので、うまく調整していきましょう。
で、最後に、ブランチ側からのマージ分をcommitして、任務完了!!
補足
この方法は、別リポジトリからのマージにも使えたりします。
gitっぽく、まずローカルリポジトリで細かくcommitしていって、
一段落ついたらリモートリポジトリにcommitといった運用もあり。