Subversionでは、cvs status と cvs update コマンドの間にあるたくさんの混乱 をなくそうとしてきました。
cvs status コマンドは二つの目的があります:
まず、作業コピー中のローカルな変更をユーザに示すこと、二番目に
どのファイルが最新ではなくなっているかをユーザに示すこと。
不幸にも、CVSの非常に読みにくい状態表示のために、たくさんのCVSユーザは
このコマンドをまったく生かしていません。そのかわりに、変更点を見る
のに、cvs update、あるいは cvs -n update
を実行する癖をつけてしまいました。-n
オプションを忘れ
ると、まだ扱う準備ができていないリポジトリ上の変更もマージしてしまいま
す。
Subversion では、svn status の出力を 人間が読むにも、プログラムで扱うにも簡単になるように改良 しました。また、svn updateは更新されたファイル についての情報のみを表示し、ローカルの変更は表示 しないように しました。
svn status はローカルに修正されたすべての ファイル を表示します。デフォルトではリポジトリにアクセスしません。このコマンド はいろいろなオプションをとりますが、以下は最もよく利用されるものです:
-u
過去の情報を取得してから表示するためにリポジトリに アクセスします。
-v
バージョン管理下にあるすべての 情報を表示します。
-N
非再帰的に実行します(サブディレクトリに降りていきません)。
statusコマンドには二つの出力形式があります。 デフォルトの「短い形式」では、ローカルの変更は以下のように 表示されます:
$ svn status M foo.c M bar/baz.c
--show-updates
(-u
) スイッチを指定すると
もっと長い出力形式が利用されます:
$ svn status -u M 1047 foo.c * 1045 faces.html * bloo.png M 1050 bar/baz.c Status against revision: 1066
この場合、二つの新しいコラムが表示されます。二番目のコラムは
ファイルやディレクトリが最新でない場合にはアスタリスク('*')が表示
されます。三番目のコラムはアイテムの作業コピーリビジョン番号です。
上の例では、アスタリスクはもし更新しようとすれば
faces.html
はパッチされ、
bloo.png
はリポジトリに新規追加されるだろう
ことを示しています。(bloo.png
の前にリビジョン番号が
表示されていないのは、作業コピーにはまだ存在していないからです)
最後に、最もよく表示されるステータスコードの簡単なまとめを載せておきます:
A リソースは追加予告されています
D リソースは削除予告されています
M リソースはローカルに変更されています
C リソースは衝突しています(変更箇所がリポジトリと作業コピーとの
間でまだ完全にはマージされていません)
X リソースはこの作業コピーから見て外部のものです(他のリポジトリから
来たものです。svn:externals
項を参照してください)
? リソースはバージョン管理下にはありません。
! リソースは失われたか、不完全です(Subversion 以外の別のツールによって削除
されました)
Subversion は CVSのP
とU
コードを連結し、単にU
を表示します。
マージや衝突が起こるときには、Subversionはそれに関するすべての
内容を表示するかわりに単にG
または C
を表示します。
svn statusに関する詳細はsvn status項 を参照してください。