状態と更新の区別

Subversionでは、cvs statuscvs 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のPU コードを連結し、単にU を表示します。 マージや衝突が起こるときには、Subversionはそれに関するすべての 内容を表示するかわりに単にG または C を表示します。

svn statusに関する詳細はsvn status を参照してください。