Subversion1.6.0新機能!

Subversionの1.6.0が発表されました。
ということで、早速使ってみました。


1.6.0からの変更点としては、ツリー衝突に関する機能が新しくなったみたいです。

実際どういう感じかというと、こんな感じ。

コミットした際に衝突が発生すると、メッセージが表示されます。

$ svn ci -m 'commit'
送信しています              test1
svn: コミットに失敗しました (詳しい理由は以下のとおりです):
svn: ファイル '/test1' はリポジトリ側と比べて古くなっています
$ svn up
'test1' で競合が見つかりました。
選択: 延期 (p), 全差分 (df), 編集 (e),
        衝突自分 (mc), 衝突他人 (tc),
        , すべてのオプションを表示 (s): 

延期、全差分、編集などなどの処理の選択ができます。

ちなみに、すべてのオプションを表示(s)を実行するとこんな感じ。

  編集 (e)      - マージされたファイルにエディタで変更を加えます
  全差分 (df)   - マージによってファイルに加えられた変更をすべて表示します
  解決版 (r)    - マージされたバージョンのファイルを採用します
  衝突表示 (dc) - (マージされたバージョンを無視して) 衝突をすべて表示します
  衝突自分 (mc) - (同上) すべての衝突に関して自分のバージョンを採用します
  衝突他人 (tc) - (同上) すべての衝突に関して他人のバージョンを採用します
  完全自分 (mf) - (衝突がなくても) ファイル全体で自分のバージョンを採用します
  完全他人 (tf) - (同上) ファイル全体で他人のバージョンを採用します
  延期 (p)      - 競合に、後で解決する予定であるという印をつけます
  起動 (l)      - 競合を解決するために外部ツールを起動します
  全表示 (s)    - この選択肢一覧を表示します

今までのバージョンだと、「延期(p)」の処理が自動的に実行されていました。

1.6.0だとこんなことができます。

例1
      • 競合発生!
      • 全差分を表示(df)
      • そのままの状態で解決(r)
      • コミット実行
例2
      • 競合発生!
      • 全差分を表示(df)
      • 衝突した部分は自分が書いた部分を採用(mc)
      • コミット実行
例3
      • 競合発生!
      • 全差分を表示(df)
      • 衝突ファイルを編集(e)
      • 編集を完了して保存
      • コミット実行

それ以外にも、衝突部分について相手の記述を採用して競合解消など、
競合状態の解消が行いやすくなっています。

ちなみに、なんの設定もなしにオプションeを利用すると、こんなエラーが。

環境変数 SVN_EDITOR、VISUAL、EDITOR のどれも設定されていなく、実行時の設定オプション 'editor-cmd' も見つかりません

なので、環境変数を設定して、エディタを使えるようにする。

$ export SVN_EDITOR=vi

これでオプションeを実行した場合、viでマージされたファイルの編集ができるようになります。