S-JIS[2008-12-27/2011-09-23] 変更履歴

SVNコマンド一覧


svnadmin

SVNリポジトリーそのものを操作するコマンド。

サブコマンド 概要 CVS相当 備考 更新日
help h ヘルプ cvs --help    
create   リポジトリー作成 cvs init    
dump   リポジトリーをファイルへ出力   リポジトリーを移行する例 2011-09-23
load   リポジトリーへファイルからロード   リポジトリーを移行する例 2011-09-23
hotcopy   リポジトリーをコピー      
verify   リポジトリーの検証      
recover   リポジトリーの修復      
upgrage   リポジトリーのバージョンアップ      
lslocks   ロック一覧を表示     2008-12-29
rmlocks   ロックを削除     2008-12-29
lstxns   トランザクション一覧を表示      
rmtxns   トランザクションを削除      
setlog   コミットログの変更     2008-12-28

svnlook

SVNリポジトリー内の情報を見る為のコマンド(照会専用)。

サブコマンド 概要 CVS相当 更新日
help h   ヘルプ cvs --help  
youngest     最新リビジョン番号   2008-12-28
history     リビジョン番号一覧   2009-01-27
author     指定リビジョン コミットしたユーザー   2008-12-28
date     コミットした日時   2008-12-28
log     コミットログメッセージ   2008-12-28
info     コミット情報(ユーザー・日時・ログ)   2008-12-28
proplist plist pl プロパティー(属性)一覧   2008-12-28
propget pget pg プロパティー(属性)   2008-12-28
tree     ディレクトリー・ファイル一覧   2008-12-28
changed     変更のあったファイル一覧   2008-12-28
dirs-changed     変更のあったディレクトリー一覧   2008-12-28
diff     変更内容一覧    
cat     指定ファイル ファイル内容 cvs update -p  

リビジョン指定を省略した場合、最新リビジョンが対象。

svnlookでは、リポジトリーの場所を表す引数が必須となる。[2008-12-29]
ただ、長めのパスだと毎回打つのが面倒なので、そのパスへ移動して「.(カレントディレクトリー)」で指定してしまうのが楽かも。
(CVSROOTみたいな環境変数があれば便利なのに…)

> svnlook youngest
リポジトリの引数が必要です
使用方法を知りたいときは 'svnlook help' と打ってください。

> svnlook youngest C:/svn/sample
8

> cd C:/svn/sample
C:\svn\sample> svnlook youngest .
8

svn

SVNワークディレクトリーの操作を行うコマンド。

サブコマンド 概要 CVS相当 更新日
help h     ヘルプ cvs --help  
import       初回登録 cvs import 2008-12-29
checkout co     作業ディレクトリー作成 cvs checkout  
update up     最新版取得 cvs update  
add       ファイル・ディレクトリーの追加 cvs add  
remove rm delete del ファイル・ディレクトリーの削除 cvs remove  
copy cp     ファイル・ディレクトリーのコピー なし  
move mv rename ren ファイル・ディレクトリーの移動 なし 2009-01-18
mkdir       ディレクトリーの作成 なし  
status stat st   作業ディレクトリー状態表示 cvs status  
resolve       競合(コンフリクト)解消    
changelist cl     変更リストの編集    
commit ci     変更の登録(確定) cvs commit  
revert       変更の取り消し cvs update -C  
list ls     リポジトリー上のファイル一覧表示    
cat       ファイル内容表示 cvs update -p  
blame praise annotate ann ファイル内容表示(変更情報付) cvs annotate  
diff di     ファイル内容比較 cvs diff  
info       情報表示   2009-01-27
log       変更履歴表示 cvs log  
propset pset ps   プロパティー(属性)設定    
proplist plist pl   プロパティー(属性)一覧    
propget pget pg   プロパティー(属性)表示    
propedit pedit pe   プロパティー(属性)編集    
propdel pdel pd   プロパティー(属性)削除    
merge       マージ cvs update -j  
mergeinfo            
export       リポジトリーを出力 cvs export  
switch sw     別リポジトリーへ反映    
lock       ロック   2008-12-29
unlock       ロック解除   2008-12-29
cleanup       ゴミ掃除    
copy タグ・ブランチ作成 cvs tag
cvs rtag
 

svnlook youngest

SVNリポジトリー内の最新のリビジョン番号を表示する。[2008-12-28]

> svnlook youngest C:/svn/sample
8

svnlook history

指定ファイルの履歴(SVNリポジトリー内のリビジョン番号一覧)を表示する。[2009-01-27]

> svnlook history C:/svn/sample trunk/sample/bin/build.xml
リビジョン パス
--------   ----
      68   /trunk/sample/bin/build.xml
      56   /trunk/sample/bin/build.xml
       8   /trunk/sample/temp/build.xml

パスが途中で変わっているのは、ファイルを移動した為。

ファイル(パス)を指定しなかった場合は、ルートの一覧が表示される。[2008-12-28]
(↓あんまり意味が無い(爆))

> svnlook history C:/svn/sample
リビジョン パス
--------   ----
       8   /
       7   /
       6   /
       5   /
       4   /
       3   /
       2   /
       1   /
       0   /
> svnlook history C:/svn/sample -r 6 -l 4	…リビジョン6から4件だけ表示
リビジョン パス
--------   ----
       6   /
       5   /
       4   /
       3   /

svnlook tree

SVNリポジトリー内のツリー(ディレクトリー・ファイル)を表示する。[2008-12-28]

> svnlook tree C:/svn/sample
/
 trunk/
  test/
   zzz.txt
 branches/
 tags/
> svnlook tree C:/svn/sample trunk
trunk/
 test/
  zzz.txt
> svnlook tree C:/svn/sample trunk/test
test/
 zzz.txt

-Nを付けると、サブディレクトリーは表示しない。

> svnlook tree C:/svn/sample -N
/
 trunk/
 branches/
 tags/

--full-pathsを付けると、ツリー状でなく、フルパス形式で表示する。

> svnlook tree C:/svn/sample --full-paths
/
trunk/
trunk/test/
trunk/test/zzz.txt
branches/
tags/
> svnlook tree C:/svn/sample trunk --full-paths
trunk/
trunk/test/
trunk/test/zzz.txt
> svnlook tree C:/svn/sample --full-paths -N trunk
trunk/
trunk/test/

svnlook author

コミットしたユーザー名を表示する。[2008-12-28]

> svnlook author C:/svn/sample -r 1		…リビジョン1をコミットしたユーザー
hishidama

svnlook date

コミットした日時を表示する。[2008-12-28]

> svnlook date C:/svn/sample -r 1		…リビジョン1がコミットされた日時
2008-12-28 04:21:58 +0900 (日, 28 12 2008)

svnlook log

ログ(コミット時のメッセージ)を表示する。[2008-12-28]

> svnlook log C:/svn/sample -r 1		…リビジョン1のコミットログ
test import

svnlook info

コミットしたユーザー日付ログメッセージをまとめて表示する。[2008-12-28]

> svnlook info C:/svn/sample -r 1
hishidama
2008-12-28 04:21:58 +0900 (日, 28 12 2008)
11
test import

下から2番目の数字は、ログメッセージの文字数(バイト数)。
例えば「trunkディレクトリー作成」なら23(=5+9×2)。


svnlook proplist

設定されているプロパティー(属性)一覧を表示する。[2008-12-28]
-v(--verbose)を付けないと、属性値は表示されない。

> svnlook plist C:/svn/sample trunk/test/Test.java -v
 svn:mime-type : text/plain

リビジョンに付けられたプロパティーを見る場合には--revpropを付ける。

> svnlook plist C:/svn/sample --revprop -r 1 -v
  svn:log : test import
  svn:author : hishidama
  svn:date : 2008-12-27T19:21:58.781250Z

SVN主管の属性(「svn:」で始まっている属性)にどのようなものがあるかについては、Subversionの属性(やsvn propsetのヘルプ(svn h pset))で見ることが出来る。

svnlook propget

設定されているプロパティー(属性)の値を取得する。[2008-12-28]

> svnlook pget C:/svn/sample svn:mime-type trunk/test/Test.java
text/plain

ただし、属性値が日本語(全角文字)の場合、文字化けする。(proplist -vで表示するのは大丈夫)


svnlook changed

そのリビジョンで変更されたファイル一覧を表示する。[2008-12-28]

> svnlook changed C:/svn/sample -r 1
A   test/
A   test/test.txt

svnlook dirs-changed

そのリビジョンで変更されたディレクトリーを表示する。[2008-12-28]

> svnlook dirs-changed C:/svn/sample -r 1
/
test/

svnadmin setlog

過去のログメッセージを変更(上書き)する。[2008-12-28]

C:\temp> echo メッセージを書き換える実験 > msg.txt
C:\temp> svnadmin setlog C:/svn/sample -r 6 msg.txt --bypass-hooks

C:\temp> svnlook log C:/svn/sample -r 6
メッセージを書き換える実験

--bypass-hooksを付けないと、以下のようなエラーになる。

C:\temp> svnadmin setlog C:/svn/sample -r 6 msg.txt
svnadmin: リポジトリが、リビジョン属性を変更できるようにはなっていません。
管理者に pre-revprop-change フックを作成するよう頼んでください

SVNはログメッセージはリビジョンに対する「svn:log」という属性の値として管理しているので、setlogも属性を変更する仕組みを使用している。
で、リビジョンに対する属性の変更は、デフォルトでは出来ないようになっているらしい。
(属性の変更前にフックという処理が呼ばれ、そこで操作の許可・拒否の判定をしている。pre-revprop-changeフックは、デフォルトでは常に拒否するようになっているのだそうだ。
なので、そのフックを修正して許可するようにするか、--bypass-hooksを付けてフックを呼ばないようにしないと、属性変更が出来ない)


svn import

ディレクトリー・ファイルをSVNリポジトリーに登録する(取り込む)。[2008-12-29]
-mか-Fによるコミットコメントの指定が必須。

ディレクトリーを別名でインポートする例

> svn import test1 svn://localhost/sample/trunk/test -m'import test'
追加しています              test\zzz.txt

リビジョン 21 をコミットしました。

ファイルをインポートする例

> svn import aaa.txt svn://localhost/sample/trunk/test/aaa.txt -m'aaa.txt import'
追加しています aaa.txt

リビジョン 22 をコミットしました。

svn info

ワークディレクトリーの情報を表示する。[2009-01-27]

C:\workspace\sample> svn info
パス: .
URL: svn://localhost/sample/trunk/sample
リポジトリのルート: svn://localhost/sample
リポジトリ UUID: 74e08888-8a67-584b-a7ce-fbc74a52e606
リビジョン: 62
ノード種別: ディレクトリ
準備中の処理: 特になし
最終変更者: hishidama
最終変更リビジョン: 62
最終変更日時: 2009-01-27 03:00:57 +0900 (火, 27 1 2009)
C:\workspace\sample\bin> svn info test.txt
パス: test.txt
名前: test.txt
URL: svn://localhost/sample/trunk/sample/bin/test.txt
リポジトリのルート: svn://localhost/sample
リポジトリ UUID: 74e08888-8a67-584b-a7ce-fbc74a52e606
リビジョン: 66
ノード種別: ファイル
準備中の処理: 削除
最終変更者: hishidama
最終変更リビジョン: 66
最終変更日時: 2009-01-27 04:54:47 +0900 (火, 27 1 2009)
テキストの最終更新: 2009-01-27 04:54:30 +0900 (火, 27 1 2009)
チェックサム: d41d8cd98f00b204e9800998ecf8427e
情報 内容
パス 情報表示対象のディレクトリーやファイル名。
infoコマンドで指定したパス。省略した場合はカレントディレクトリー。
(カレントディレクトリーからの相対パス)
名前 情報表示対象がファイルのときだけ出力される。
URL URL。いわばリポジトリーのフルパス。
リポジトリのルート リポジトリー名。
リビジョン 情報表示対象の現在のリビジョン。
ノード種別 ディレクトリやファイル。
準備中の処理 変更してコミットされていない場合の状態。

svn move

ファイルを移動、あるいはファイル名を変更する。[2009-01-18]
実際は削除+新規追加(remove+add)と同じ。

移動(改名)した直後(コミット前)は、新しいファイルの履歴(svn log)を見ても何も表示されない。
コミットしたら、移動前の履歴も含めて見る事が出来る。(移動前の履歴も残っている)


svn lock

ファイルをロックする。[2008-12-29]
他人がロックしていると、ファイルをコミットすることが出来ない。
他人がロックしていると、自分もロックすることが出来ない。ただし--forceオプションを付けると強制的に自分がロックできるので、あまり意味が無いかも…。

> svn lock zzz.txt -m'lock test'
'zzz.txt' はユーザ 'hishidama' にロックされました。

> svn status
     K zzz.txt		…ロックされている状態

> svn lock zzz.txt		…2回はロックできない
svn: 警告: Path '/trunk/test/zzz.txt' is already locked by user 'hishidama' in filesystem 'c:/svn/sample/db'
> svn commit zzz.txt	…他人がロックしていると
送信しています              zzz.txt
ファイルのデータを送信しています .svn: コミットに失敗しました (詳しい理由は以下のとおりです):
svn: ユーザ hishidama はパス '/trunk/test/zzz.txt' にロックを所有していません (現在ロックをかけているのは other です)

ロックしようとするとpre-lockフックが呼ばれ、ロックが完了するとpost-lockフックが呼ばれる。
フックの作成方法

svn unlock

ロックを解除する。[2008-12-29]
他人のロックは解除できない。が、--forceオプションを付けると解除できてしまうので、あまり意味が無いかも…。

> svn unlock zzz.txt
'zzz.txt' のロックは解除されました。

> svn unlock zzz.txt
svn: 'zzz.txt' はこの作業コピーでロックされていません	…自分がロックを持っていなければ、他人がロックしていてもこのメッセージ

アンロックしようとするとpre-unlockフックが呼ばれ、アンロックが完了するとpost-unlockフックが呼ばれる。
フックの作成方法

svnadmin lslocks

ロック一覧を表示する。[2008-12-29]

> svnadmin lslocks C:/svn/sample
パス: /trunk/test/zzz.txt
UUID トークン: opaquelocktoken:b086d27a-0a0e-5e4c-b008-48fcbce959ed
所有者: hishidama
作成日時: 2008-12-29 04:23:56 +0900 (月, 29 12 2008)
有効期限:
コメント (1 行):
lock test

svnadmin rmlocks

ロックを削除する。[2008-12-29]
この場合、アンロックのフックは呼ばれない。

> svnadmin rmlocks C:/svn/sample /trunk/test/zzz.txt
'/trunk/test/zzz.txt' のロックを解除しました。

技術メモへ戻る
メールの送信先:ひしだま