とゆーコトで
subversion を試しに使ってみたので以下にポイント列挙。
リポジトリの作成
$ svnadmin create /path/to/repositry
rails プロジェクト作成と import
$ rails depot (出力略) $ ls depot $ svn import depot file:///path/to/repositry/depot -m "initial project" (出力略)
消して co してみる
$ rm -rf depot $ svn co file:///path/to/repositry/depot $ ls depot $
conflict の解決とリポジトリからの削除を試す
ディレクトリの登録
~$ mkdir docTest ~/docTest$ cd docTest ~/docTest$ cat > README.txt This is a pen. ^D ~/docTest$ cat README.txt This is a pen. ~$ cd .. ~$ svn import docTest file:///path/to/repository/docTest -m "Initial ver." (出力略) <- ?? revision 2 になっているが?? ~$
削除して co
~$ rm -rf docTest ~$ svn co file:///path/to/repository/docTest (出力略) ~$ ls docTest ~$
conflict な状態を作ってみる
~$ mkdir tmp ~/tmp$ cd tmp ~/tmp$ svn co file:///path/to/repository/docTest (出力は略) ~/tmp$ ls docTest ~/tmp$ cd docTest ~/tmp/docTest$ ls README.txt ~/tmp/docTest$ cat >>README.txt abcdefghijklmn ^D ~/tmp/docTest$ cat README.txt This is a pen. abcdefghijklmn ~/tmp/docTest$
もう一つの作業コピーの方でもモディファイ
~/tmp/docTest$ cd ~$ cd docTest ~/docTest$ ls README.txt ~/docTest$ cat >>README.txt I'm a ULtraman! ^D ~/docTest$
svn up してみると??
~/docTest$ svn update リビジョン 2 です。 ~/docTest$
問題なし。で、commit かけてみる。
~/docTest$ svn commit 送信しています README.txt ファイルのデータを送信中です. リビジョン 3 をコミットしました。 ~/docTest$
もう一つの作業コピーで update すると??
~/docTest$ cd ~$ cd tmp/docTest ~/tmp/docTest$ svn update C README.txt リビジョン 3 に更新しました。 ~/tmp/docTest$ ls README.txt README.txt.mine README.txt.r2 README.txt.r3 ~/tmp/docTest$
なんだこれは、とゆー事でマニュアル参照
Subversion でバージョン管理
http://www.02.246.ne.jp/~torutk/subversion/intro.html より
例えば、aFileにコンフリクトが発生すると
aFile
コンフリクトが発生した個所にその状況が挿入されたファイル
aFile.mine
作業コピーをupdateする前のファイルは、これにリネームされる
aFile.rXXXX (XXXXはupdate前の作業ファイルのチェックアウトされた時の内容)
update前の作業コピーが紐付けされているリポジトリの内容
aFile.rXXXX (XXXXはupdate後のリポジトリの内容)
updateによって最新となるリポジトリの内容
実際、中身はこんな感じになっている。
~/tmp/docTest$ cat README.txt This is a pen. <<<<<<< .mine abcdefghijklmn ======= I'm a ULtraman! >>>>>>> .r3 ~/tmp/docTest$ cat README.txt.mine This is a pen. abcdefghijklmn ~/tmp/docTest$ cat README.txt.r2 This is a pen. ~/tmp/docTest$ cat README.txt.r3 This is a pen. I'm a ULtraman! ~/tmp/docTest$
この状態で commit かけれるの??
~/tmp/docTest$ svn commit svn: コミットに失敗しました (詳しい理由は以下のとおりです): svn: コミットを中止しています: '~/tmp/docTest/README.txt' がまだ衝突しています ~/tmp/docTest$
駄目。< 当たり前
Subversion によるバージョン管理
http://subversion.bluegate.org/doc/book.html
によると解決方法は三つあるとの事。(全て手動による解決)
- 「手で」 衝突テキストをマージ。( ファイル中の衝突マーカを調べ編集することによる)
- 作業ファイルに、一時ファイルのどれかを上書き。
- svn revert
を実行して、ローカルでしたすべての変更を捨てる。
又
このときSubversionは三つの一時ファイルが削除されるまで sandwich.txtのコミットを許可 しません。
とあるように、ファイルを削除すれば無理矢理 commit も可能かも。
自分が修正したものを commit する形で試してみる。
~/tmp/docTest$ cp README.txt.mine README.txt ~/tmp/docTest$ rm README.txt.* ~/tmp/docTest$ ls README.txt ~/tmp/docTest$ svn commit 送信しています README.txt ファイルのデータを送信中です. リビジョン 4 をコミットしました。 ~/tmp/docTest$
で、いぢくり回したこの docTest をリポジトリから消したい。
やってみる。
$ svn delete file:///path/to/repository/docTest リビジョン 5 をコミットしました。 $