ぱそくま ろご
linux > Subversion > svnで作業する

svnで作業する

svnを使った作業の大まかな流れ

svnを使って作業する場合、以下の流れになると思います。

  1. プロジェクトをチェックアウトする。
  2. ファイルを追加、修正したり、不要なファイルは削除する。
  3. 修正内容をサーバーに送る。(コミット)

なお、チェックアウトは作業コピーを作成するので初回のみの作業となり、それ以降は2-3の繰り返しになります。

まずはsvnでチェックアウト

Subversionのリポジトリーからプロジェクトをチェックアウトします。これによりローカルマシンにリポジトリの作業コピーが作成されます。

チェックアウト例

[paso ~] svn checkout svn://hogehoge.com/hoge/trunk



ファイルを修正したり、ディレクトリを追加したり

ファイルの中身を修正はいつでも自由にできます。ただし、追加、削除した場合はsvnにその旨を記録しなければなりません。 また、ファイル名の変更や移動はsvnコマンドを使って行わなければなりません。 もちろん、それらの作業を取り消すこともできます。

基本的なsvn作業
概要操作詳細
追加 svn add [path]... ファイルやフォルダを追加します。
削除 svn delete (or del) [path]... ファイルやフォルダを削除します。
コピー svn copy [path]... ファイルやフォルダーのコピーを作成し、add状態にします。ファイルをコピーして、svn addした結果と同じです。
移動 svn move [path]... ファイルやフォルダーを移動(名前の変更も含む)します。実際は、delしてからaddしてます。よって、moveし忘れた場合はrevertをするか、元のファイルをdelすれば問題ありません。
変更取消 svn revert [path]... 指定したパスまたはファイルを修正前(「update」した直後)の状態に戻します。「-R」オプションを使うと再帰的に取り消してくれます。

修正状況を確認する

自分が追加、修正したファイルなどの確認が必要です。確認は「svn status」と入力します。

修正状況を表示する(svn statusの例)

  • [paso ~] svn status
  • M  dir1/test1.html
  • A  dir1/test3.html
  • ?  dir1/sub1/file1.html
  • ?  dir1/sub1/file2.html

このように「svn status」と入力すると、変更点があったファイルの状態を英文字を使って教えてくれます。 なお、英文字の意味は下表を参考にしてください。

svn statusの先頭の英文字
英文字 詳細
A 「svn add」されたファイルです。
M ファイルが修正されています。
D 「svn del」されたファイルです。
! ファイルが見当たらない場合です。「svn del」を使わずに直接削除する場合などで表示されます。
? バージョン管理されていないファイルです。ファイルを新規に作成し、「svn add」をしていないと、これが表示されます。

svnで修正したファイルをサーバーに送る。(コミット)

修正等が終了したら、サーバーにコミットします。 これにより、サーバーのリポジトリに変更点が反映され、他の人が取得することができます。 なお、「svn ci」でファイルパスを省略するとはカレントディレクトリー以下がコミット対象となります。

コミットの例

[paso ~] svn commit --message 'コーディング規約に準じていないものを軒並み修正'

コミット引数の省略例

[paso ~] svn ci -m 'コーディング規約に準じていないものを軒並み修正'

1ファイルだけコミットの例

[paso ~] svn ci -m 'トップページリニューアル' ./www/index.html

最新の内容を取得

他の人が修正、コミットしたものを取得するにはアップデートを使います。

アップデートの例

[paso ~] svn update

svnで一括追加や削除

大量のファイルを追加した場合や、svn delを使わずにファイルを削除した場合など、1つ1つファイルをaddしたりdelしたりするのは大変手間がかかります。 そこでlinuxの標準のコマンドを使えば、一括で処理することが可能です。

全件追加の例

  • [paso ~]svn status | grep '^?' | awk '{print $2}' | xargs svn add

全件削除の例

  • [paso ~]svn status | grep '^!' | awk '{print $2}' | xargs svn del

各例を解説すると、正規表現を使ってsvn statusの先頭の文字を判断し(svn status | grep ^!)、そのファイル名を取得(awk '{print $2}')し、 取得したファイル名を引数にしてsvnコマンドを実行(xargs svn add or del)しています。