状態と更新の区別

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の前にリビジョン番号が 表示されていないのは、作業コピーにはまだ存在していないからです)

At this point, you should take a quick look at the list of all possible status codes in svn status. Here are a few of the more common status codes you'll see:

A    リソースは追加予約されています
D    リソースは削除予約されています
M    リソースはローカルに変更されています
C    リソースは競合しています (変更箇所がリポジトリと作業コピーとの
       間でまだ完全にはマージされていません)
X    リソースはこの作業コピーから見て外部のものです (他のリポジトリ由来です。
       外部定義項を参照)。
?    リソースはバージョン管理下にはありません。
!    リソースは失われたか、不完全です(Subversion 以外の別のツールによって削除
       されました)

For a more detailed discussion of svn status, see 自分がした変更の概要確認項.

更新

svn update updates your working copy, and only prints information about files that it updates.

Subversion は CVS の PU コードを連結し、単に U を表示します。 マージや競合が起こるときには、Subversionはそれに関するすべての 内容を表示するかわりに単に G または C を表示します。

svn statusに関する詳細は自分がした変更の概要確認項 を参照してください。