今となってはあまり使う理由の無い SVN (Subversion) を使う必要があったので、再度使用する事が出た時の為に残しておこうと思います。

検索をしていて思うのはあまりにも Eclipse とか、TortoiseSVN を使って~なんていっぱい出るのにコマンドでの操作は全然出てきません。本当に辛いですね… ブログ書いて社会貢献します。

そして早く Git のある世界に帰りたいですね。

Subversion に求めたもの

svn は意外と素直なんじゃないかと思います。

でも素直過ぎて扱い辛い、そんな感じですね。
そして、少数で使用しているからこそ、コンフリクトがあまり発生していませんが、簡単に発生して作業を止めてしまう可能性があるのを考えると、非エンジニアが使うのは厳しそうでした。

コミット

$ svn add 
$ svn commit -m "Commit message"
$ svn update

コミットは問題無く簡単なコマンドで出来ます。
ただ、svn update を忘れちゃうとドツボにハマります。Git で言う push にあたるんですが、同時に pull でもあるので余計ですね。

コミット取り消し

$ svn log
... # なんか色々ログ出る
... # 巻き戻したいリビジョン番号を覚える
$ svn merge -r HEAD:<巻き戻したい番号> <リポジトリ or .>
$ svn commit -m "Commit message" # ロールバック確定
$ svn update

svn のログは基本流れていくので、less で掴まえるかリダイレクトでファイルに吐いとくと楽でした。
ファイルを削除されてしまった物を探している時が結構辛くて、
検索してるとリポジトリを指定して普通に指定リビジョンから取得出来るってあるんだけど、エラーが出て取れなかったのがなんとも。
一瞬アカウントの問題かと思ったんだけど、一度取得したリポジトリで情報は保存してあるので、違う気がするんですよね。

完全に良くない方法だったけど、さっさと修復出来ればもはやなんでも良かったので、diff を使って取得する事にしました。

削除ファイルの救助

$ svn log -v
... # -v でファイルへの変更が分かる
... # D or A or M の様な文字とファイル名が出る
$ svn diff -r <戻したいファイルが削除されるリビジョンの一つ前>:<削除されたリビジョン> <戻したいファイル> > tempfile
# 戻したいファイルの変更が diff で出るのをリダイレクト

あとは変更内容を適当に取り出せば終わりなんですが、すっごい気にくわない…
まぁ問題は解決したし、svn はそうそう使う機会ないんで次同様の問題が発生したら考えます。