以前Mac bookでSubversionを使用したときのメモ(備忘録用)。
(今後使い込んだ際に改めて書きなおそうかな。。)
リポジトリの作成
データする格納ディレクトリをSubversionに登録する。
svnadmin create <ディレクトリのパス名>
mkdir /Users/yukun/svn-repos svnadmin create /Users/yukun/svn-repos
準備用のディレクトリを作成
- インポートするフィアルが存在するディレクトリに移動。
- リポジトリにプロジェクトのファイルをインポート(リポジトリに追加する)する。
- Firstrunプロジェクトとする。
- -mオプションで任意のメッセージを関連付けられる。
mkdir /Users/yukun/tmp cd tmp
tmp> svn import -m "imoprting firstrun project" . file:///Users/yukun/svn-repos/firstrun/trunk Adding Number.txt Adding Day.txt Committed revision 1.
インポートの一般式
svn import -m “<コメント>” <ファイルが入っているディレクトリのパス> <リポジトリのパス>
カレントディレクトリ内のフィアルをインポートしたことになる。
$ mkdir /Users/yukun/work 作業ディレクトリを作成 $ cd work $ mkdir firstrun
チェックアウト
リポジトリからローカルに最新の変更を受け取る。
work> svn co file:///Users/yukun/svn-repos/firstrun/trunk firstrun A firstrun/Number.txt A firstrun/Day.txt Checked out revision 1.
チェックアウトの一般式
$ svn co <リポジトリのパス> <コピー先ディレクトリのパス>
プロジェクトがローカルで変更が行われたか否かを確認。
firstrun> svn status Day.txt M Day.txt
Mはローカルで変更されていて、その変更がリポジトリにコミットされていない。
プロジェクト内のファイルの差分を確認。
svn diff Day.txt Index: Day.txt =================================================================== --- Day.txt (revision 1) +++ Day.txt (working copy) @@ -2,4 +2,6 @@ tuesday wednesday thrusday -friday No newline at end of file +friday +saturday +sunday No newline at end of file
リポジトリの更新(コミット)
firstrun> svn commit -m "Client wants us to work on weekends"weekends" Sending Day.txt Transmitting file data . Committed revision 2.
リビジョン番号は変更したファイル数にかかわらずリポジトリ全体に及ぶ
コミットの一般式
作業ディレクトリ内で
firstrun> svn commit -m “<コメント>”
リポジトリが実際に更新されたかどうか確認する。
firstrun> svn log Day.txt ------------------------------------------------------------------------ r2 | yukun | 2008-12-23 17:28:42 +0900 (火, 23 12 2008) | 1 line Client wants us to work on weekends ------------------------------------------------------------------------ r1 | yukun | 2008-12-23 16:51:27 +0900 (火, 23 12 2008) | 1 line imoprting firstrun project ------------------------------------------------------------------------
変更の詳細を出力。
firstrun> svn log --verbose Day.txt ------------------------------------------------------------------------ r2 | yukun | 2008-12-23 17:28:42 +0900 (火, 23 12 2008) | 1 line Changed paths: M /firstrun/trunk/Day.txt Client wants us to work on weekends ------------------------------------------------------------------------ r1 | yukun | 2008-12-23 16:51:27 +0900 (火, 23 12 2008) | 1 line Changed paths: A /firstrun A /firstrun/trunk A /firstrun/trunk/Day.txt A /firstrun/trunk/Number.txt imoprting firstrun project ------------------------------------------------------------------------
$ svn log のみだと最新の変更は出てこない。
また、作業ディレクトリ以外でコマンドを実行すると、
work> svn log svn: '.' is not a working copy
のようにエラーとなる。
競合の発生
2人目のユーザの作業ディレクトリをfirstrun02とする。
svn co file:///Users/yukun/svn-repos/firstrun/trunk firstrun02 A firstrun02/Number.txt A firstrun02/Day.txt Checked out revision 2. firstrun> svn commit -m "Customer wants more numbers" Sending Number.txt Transmitting file data . Committed revision 3.
作業ディレクトリのファイルにチェックアウトしたものより新しいバージョンがあるか否かを確認。
firstrun02> svn status --show-updates * 2 Number.txt Status against revision: 3 firstrun02> svn status -u * 2 Number.txt Status against revision: 3
*はリポジトリ内に更新済みのものが存在するかどうか、
すなわちローカルにあるフィアルは古いですよ、ということ。
ローカルのコピーとリポジトリ内の最新のリビジョンを比較するには、
firstrun02> svn diff -rHEAD Number.txt ndex: Number.txt =================================================================== --- Number.txt (revision 3) +++ Number.txt (working copy) @@ -2,6 +2,4 @@ one two three -four -five -six No newline at end of file +four No newline at end of file
普通のdiffではチェックアウトされたリビジョン、ここではr2としか比較しないので、変更点を検出できない。
作業ディレクトリのファイルを更新して最新のリビジョンにマージするには、
firstrun02> svn update U Number.txt Updated to revision 3.
Uはフィアルが更新されたことを示している。