Plastic SCM CLI ガイド


概要

Plastic SCM は視覚的なバージョン管理システムです。しかし、コマンドラインから使用することもできます。

このガイドでは、Plastic の操作に慣れていただくために、一般的なコマンドラインインターフェース(CLI)のシナリオを順を追ってご説明します。

cm help command_name を使用すると、すべてのコマンドに関する詳細情報をいつでも取得できます。

Plastic でサポートされているさまざまなオブジェクト指定の定義を確認するには、cm help objectspec コマンドを実行します。


新規ワークスペースを作成する

新規ワークスペースの作成に必要なのは、cm workspace create コマンドを使用することだけです。

>cm workspace create quakewk quake_path --repository=quake@localhost:6060 Workspace quakewk has been correctly created

そして次のコマンドを実行し、新規に作成されたディレクトリへ移動します。

>cd quake_path >cm status /main@quake@localhost:6060 (cs:0 - head)

これは、依然として変更セット 0 にいることを意味します。更新をまだ実行していなかったためです。デフォルトでは、ワークスペースはブランチ main を使用するよう設定されています。

次のように cm status --head を実行することで、対象ブランチの最新の変更セットを確認することができます。

>cm status --head cs:573@quake@localhost:6060

最新の変更セットに更新するには、次のように入力するだけです。

>cm update

その後、コピーされる対象のファイルに関する全情報のダンプがコマンドによって開始され、これは最新の変更セットへ更新がされるまで続けられます。

>cm status /main@quake@localhost:6060 (cs:573 - head)

これで最新の変更セット(このケースでは 573)になりました。


新規ブランチを作成し、そのブランチに切り替える

新規ブランチを作成するには、次のように cm branch(または cm branch create)コマンドを実行するだけで済みます。

> cm branch main/fix-1342

ここでは新規ブランチを作成したのみで、cm status に示されているように、まだそのブランチには切り替えていません。

>cm status /main@quake@localhost:6060 (cs:573 - head)

開始点を指定しなかったため、新規ブランチは単に親ブランチの最新の変更セット(このケースでは main の cset 573)から始まります。--changeset 修飾子と --label 修飾子を使用して、ブランチを開始する変更セットまたはラベルを指定できます。

次は、switch コマンドを使用してワークスペースをそのブランチに切り替えます。

> cm switch main/fix-1342 Performing switch operation... Searching for changed items in the workspace... Setting the new selector... Plastic is updating your workspace. Wait a moment, please... The workspace c:\Users\pablo\wkspaces\quake_path is up-to-date (cset:573@quake@localhost:6060)

新規ブランチはまだ空であるため、Plastic は実際には切り替えを実行するためにワークスペース上で何も更新しませんでした。この時点では、fix-1342 は同じ cset 573 をポイントしているためです。


変更 - 編集 - チェックインのワークフロー

ワークスペース内のファイルを編集し、その後変更を検索することでそのファイルを特定します。

>vim code\FileSystem-renamed.cs >cm status /main/fix-1342@quake@localhost:8084 (cs:573 - head) Changed Status Size Last Modified Path Changed 80 bytes 6 seconds ago code\FileSystem-renamed.cs

status は、(以前に示した)ワークスペースの設定のみでなく、変更、チェックアウト、移動、削除などが行われたファイルも表示します。

次は、FileSystem-renamed.cs を新しい場所に移動します。

>move code\FileSystem-renamed.cs code\lib\FileSystem.cs 1 file(s) moved.

それから status を実行して移動されたファイルを探します。

>cm status /main/fix-1342@quake@localhost:8084 (cs:573 - head) Moved Status Size Similarity Path Moved locally 86 bytes 99% code\FileSystem-renamed.cs -> code\lib\FileSystem.cs

ここで Moved locally とは、ファイルを Plastic のコントロール外に移動したが、その移動されたファイルは引き続き以前のバージョンと 99% 同じであるため、検出は可能であることを意味します。

その後、変更を簡単にチェックインできます。

>cm ci --all The selected items are about to be checked in. Please wait ... Assembling checkin data Validating checkin data Uploading file data Uploaded 0 bytes of 2.77 KB (0%) Confirming checkin operation Modified c:\Users\pablo\wkspaces\quake_path\code Modified c:\Users\pablo\wkspaces\quake_path\code\lib Modified and moved from c:\Users\pablo\wkspaces\quake_path\code\FileSystem-renamed.cs to c:\Users\pablo\wkspaces\quake_path\code\lib\FileSystem.cs Created changeset cs:575@br:/main/fix-1342@quake@localhost:6060 (mount:'/')

デフォルトの ci コマンドは、追加されたすべてのファイルをチェックインします。ci --all は基本的に、変更されたファイルをすべて検出してチェックインを実行するよう Plastic に指示します。そして、all は変更、削除、または移動されたファイルを指します。ci --all --private を使用してプライベートファイルを含めることもできます。

注:ここではファイルを編集してからチェックインを実行するという、非常にシンプルなワークフローに従いました。これは、SVN や Git などのバージョン管理ツールで広まった、典型的な編集 - チェックインのワークフローです。

Plastic SCM は、チェックアウト - 編集 - チェックインのワークフローにも対応しています。


ログや差分から履歴をチェックする

cm log このコマンドで、指定した変更セット、あるいは特定の変更セットの範囲に対して行われた変更が表示されます。

>cm log cs:575 Changeset number: 575 Branch: /main/fix-1342 Owner: pablo Date: 7/18/2015 19:41:29 Comment: Changes: C code\lib\FileSystem.cs M code\lib\FileSystem.cs

ここで、チェックインを行い、最終変更セット内で、ファイル FileSystem.cs を変更して移動したことが表示されます。

コマンド cm diff でも同様の処理が行われますが、常に対象は指定の変更セットに限定されます。

>cm diff cs:575 C "code\lib\FileSystem.cs" M "code\FileSystem-renamed.cs" "code\lib\FileSystem.cs"

ワークスペース内のすべての変更をクリーンアップする

実験的な変更をしばらく試してみた後で、保留中の変更をすべて捨てて、最初からやり直すことに決めました。どうすればよいでしょうか?

まず現在のステータスを確認します。

>cm status /main/fix-1342@quake@localhost:8084 (cs:575 - head) Changed Status Size Last Modified Path Changed 49.23 KB 2 hours ago code\bsp-renamed.c Changed 23.42 KB 2 hours ago code\cgame\cg_drawtools.c Changed 61.23 KB 8 minutes ago libs\cmdlib.h Changed 398 bytes 7 minutes ago libs\str.h

必要なのは、すべての変更を元に戻すことだけです。このために、undo コマンドをただ繰り返して実行します。

>cm undo -r c:\Users\pablo\wkspaces\quake_path\libs\str.h unchecked out correctly c:\Users\pablo\wkspaces\quake_path\libs\cmdlib.h unchecked out correctly c:\Users\pablo\wkspaces\quake_path\code\cgame\cg_drawtools.c unchecked out correctly c:\Users\pablo\wkspaces\quake_path\code\bsp-renamed.c unchecked out correctly

ステータスは次のようになります。

>cm status /main/fix-1342@quake@localhost:8084 (cs:575 - head)

つまり、クリーンになりました。

備考:

デフォルトでは、undo は、本当の「チェックアウト」か単なる変更済みファイルかにかかわらず、すべての変更に適用されますが、undo を特定の変更の種類に限定することができます。Plastic では「変更済みファイル」と「チェックアウト済みファイル」は少し異なり、一部のコマンドにはそれが反映されています

上述のように、特定の変更の種類に undo を限定できます。これはフィルターオプションを使用して行います。

上述と同じ変更があるが、今回は 2 つのファイルを追加して削除したとします。

>cm status /main/fix-1342@quake@localhost:8084 (cs:575 - head) Changed Status Size Last Modified Path Changed 49.23 KB 2 hours ago code\bsp-renamed.c Changed 23.42 KB 2 hours ago code\cgame\cg_drawtools.c Changed 61.23 KB 9 minutes ago libs\cmdlib.h Changed 398 bytes 8 minutes ago libs\str.h Deleted Status Size Path Removed 12.41 KB code\bsp-temp.c Added Status Size Last Modified Path Added 4.42 KB 17 seconds ago code\bsp-experimental.c

今回は、追加と削除を元に戻しますが、変更はそのままにします。これはフィルターを使用して行います。

>cm undo --added --deleted -r c:\Users\pablo\wkspaces\quake_path\code\bsp-experimental.c unchecked out correctly c:\Users\pablo\wkspaces\quake_path\code\bsp-temp.c unchecked out correctly

ステータスは次のようになります。

>cm status /main/fix-1342@quake@localhost:8084 (cs:575 - head) Changed Status Size Last Modified Path Changed 49.23 KB 2 hours ago code\bsp-renamed.c Changed 23.42 KB 2 hours ago code\cgame\cg_drawtools.c Changed 61.23 KB 10 minutes ago libs\cmdlib.h Changed 398 bytes 9 minutes ago libs\str.h

望んだとおりになっています。


1 つの変更を元に戻す

1 つの変更済みファイルを元に戻すにはどうすればよいでしょうか?

次のように、いくつかのファイルを変更したとします。

>cm status /main/fix-1342@quake@localhost:8084 (cs:575 - head) Changed Status Size Last Modified Path Changed 15.83 KB 50 seconds ago code\cgame\cg_ents.c Changed 35.27 KB 30 seconds ago code\cgame\cg_main.c

cg_main.c への変更のみを元に戻したい場合は、次のコマンドを実行します。

>cm undo code\cgame\cg_main.c c:\Users\pablo\wkspaces\quake_path\code\cgame\cg_main.c unchecked out correctly >cm status /main/fix-1342@quake@localhost:8084 (cs:575 - head) Changed Status Size Last Modified Path Changed 15.83 KB 50 seconds ago code\cgame\cg_ents.c

パスでフィルタリングして変更を元に戻す

特定のパスの下にあるいくつかの変更を元に戻す必要がある場合は、次のようにコマンドを実行できます。

>cm status /main/fix-1342@quake@localhost:8084 (cs:575 - head) Changed Status Size Last Modified Path Changed 15.83 KB 50 seconds ago code\lib\be_aas_cluster.c Changed 35.27 KB 5 minutes ago code\cgame\cg_ents.c Changed 73.15 KB 5 minutes ago code\cgame\cg_localents.c Changed 62.62 KB 5 minutes ago code\renderer\tr_cmds.c Changed 12.26 KB 5 minutes ago merge\Socket.cs

code の下にある変更を元に戻したいが、merge の下にあるものはそのままにしたいという場合は、次のようにできます。

>cm unco code -r c:\Users\pablo\wkspaces\quake_path\code\renderer\tr_cmds.c unchecked out correctly c:\Users\pablo\wkspaces\quake_path\code\cgame\cg_localents.c unchecked out correctly c:\Users\pablo\wkspaces\quake_path\code\cgame\cg_ents.c unchecked out correctly c:\Users\pablo\wkspaces\quake_path\code\lib\be_aas_cluster.c unchecked out correctly

意図したとおりのステータスになりました。

>cm status /main/fix-1342@quake@localhost:8084 (cs:575 - head) Changed Status Size Last Modified Path Changed 12.26 KB 5 minutes ago merge\Socket.cs

ワイルドカードを使用して、元に戻す対象をさらに厳密に指定することもできます。

>cm status /main/fix-1342@quake@localhost:8084 (cs:575 - head) Changed Status Size Last Modified Path Changed 15.83 KB 4 minutes ago code\lib\be_aas_cluster.c Changed 3.14 KB 4 minutes ago code\lib\be_aas_cluster.h Changed 35.27 KB 8 minutes ago code\cgame\cg_ents.c Changed 3.24 KB 2 minutes ago code\cgame\cg_ents.h Changed 73.15 KB 8 minutes ago code\cgame\cg_localents.c Changed 6.14 KB 2 minutes ago code\cgame\cg_localents.h Changed 62.62 KB 8 minutes ago code\renderer\tr_cmds.c Changed 1.98 KB 2 minutes ago code\renderer\tr_cmds.h Changed 12.26 KB 8 minutes ago merge\Socket.cs

今度は、code の下のヘッダーファイルを元に戻しながらも、ソースファイルはそのままにしたいと思います。

>cm unco code\*.h -r c:\Users\pablo\wkspaces\quake_path\code\renderer\tr_cmds.h unchecked out correctly c:\Users\pablo\wkspaces\quake_path\code\cgame\cg_localents.h unchecked out correctly c:\Users\pablo\wkspaces\quake_path\code\cgame\cg_ents.h unchecked out correctly c:\Users\pablo\wkspaces\quake_path\code\lib\be_aas_cluster.h unchecked out correctly

意図したとおりのステータスになりました。

>cm status /main/fix-1342@quake@localhost:8084 (cs:575 - head) Changed Status Size Last Modified Path Changed 15.83 KB 5 minutes ago code\lib\be_aas_cluster.c Changed 35.27 KB 9 minutes ago code\cgame\cg_ents.c Changed 73.15 KB 9 minutes ago code\cgame\cg_localents.c Changed 62.62 KB 9 minutes ago code\renderer\tr_cmds.c Changed 12.26 KB 9 minutes ago merge\Socket.cs

特定のパス内の変更をチェックインする

ここでは、指定したパスにある特定のファイルのみをチェックインします。次のように変更済みのファイルがいくつかあります。

>cm status /main/fix-1342@quake@localhost:8084 (cs:575 - head) Changed Status Size Last Modified Path Changed 12.26 KB 5 minutes ago merge\Socket.cs Changed 42.26 KB 5 minutes ago q3radiant\alpha\osf\tst\sort.sbk Changed 86.27 KB 5 minutes ago q3radiant\alpha\osf\tst\spill.2bk Changed 85.27 KB 5 minutes ago q3radiant\alpha\osf\tst\spill.sbk Changed 34.26 KB 5 minutes ago q3radiant\alpha\osf\tst\stdarg.1bk Changed 34.26 KB 5 minutes ago q3radiant\alpha\osf\tst\stdarg.2bk Changed 34.26 KB 5 minutes ago q3radiant\alpha\osf\tst\stdarg.sbk

しかし、チェックインしようとしているのは q3radiant\alpha 内のもののみです。したがって、次のように checkin コマンドを実行します。

>cm ci q3radiant\alpha\* -c "osf files checked in" --all The selected items are about to be checked in. Please wait ... Assembling checkin data Validating checkin data Uploading file data Uploaded 0 bytes of 14.53 KB (0%) Uploaded 0 bytes of 14.53 KB (0%) Uploaded 0 bytes of 14.53 KB (0%) Uploaded 0 bytes of 14.53 KB (0%) Uploaded 0 bytes of 14.53 KB (0%) Uploaded 0 bytes of 14.53 KB (0%) Confirming checkin operation Modified c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\sort.sbk Modified c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\spill.2bk Modified c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\spill.sbk Modified c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.1bk Modified c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.2bk Modified c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.sbk Created changeset cs:576@br:/main/fix-1342@quake@localhost:6060 (mount:'/')

変更やチェックアウトの実行について

Plastic SCM では、ファイルを単に変更することも、チェックアウトすることもできます。つまり、edit-checkin または checkout-edit-checkin という 2 つのワークフローを行うことができます。

ファイルのチェックアウトとは、これからファイルを変更すると Plastic に対して通知することです。これで、ファイルがチェックアウト済みファイルの内部リストに追加されます。

チェックアウトを使用する理由は主に 3 つあります。

  1. Perforce(p4 編集)または ClearCase(チェックアウト)を使用していたために、この方法に慣れています。この方法で操作する場合は、ワークスペースで保護のためにファイルを読み取り専用に設定することをお勧めします。こうしておくと、ファイルをチェックアウトする前に変更するとファイルシステムによって警告されます。
    ファイルを読み取り専用に設定
  2. 排他的チェックアウト(ロック)を使用する必要がある場合は、ファイルを編集する前にチェックアウトする必要があります。ロックの詳細については、こちらをご覧ください。
  3. 大規模なコードベース(ファイル数 > 500,000)の作業を行っている場合は、すべての操作の速度を上げるためにチェックアウトの使用をお勧めします。cm status によって、ワークスペース全体での変更箇所を確認します。チェックアウトを使用する場合、status コマンドでは、チェックアウトリスト内のファイルのみがリスト表示されます。ディスクへのアクセスは必要ありません。

チェックアウト - 編集 - チェックインのワークフロー

チェックアウト - 編集 - チェックインの形式での作業は、非常にシンプルです。すべきことは、ファイルを編集する前に cm co コマンドを実行するだけです。

>cm co q3radiant\Bmp.cpp The selected items are about to be checked out. Please wait ... Item q3radiant\Bmp.cpp was correctly checked out >cm status /main/fix-1342@quake@localhost:8084 (cs:576 - head) Changed Status Size Last Modified Path Changed 12.26 KB 5 minutes ago merge\Socket.cs Checked-out 12.21 KB 65 minutes ago q3radiant\Bmp.cpp

ここで、Bmp.cpp が変更済みではなくチェックアウトとしてマークされていることを確認できます。

次の例に示すように、cm mv コマンドを使用して移動されたファイルは、チェックアウトのもう 1 つの形式とみなされます。

>cm mv common\aselib.c q3asm common\aselib.c has been moved to q3asm >cm status /main/fix-1342@quake@localhost:8084 (cs:576 - head) Changed Status Size Last Modified Path Changed 12.26 KB 5 minutes ago merge\Socket.cs Checked-out 12.21 KB 65 minutes ago q3radiant\Bmp.cpp Moved Status Size Similarity Path Moved 88 bytes common\aselib.c -> q3asm\aselib.c

aselib.c が、「ローカルで移動」されたのではなく、ただ移動されたことが表示されます。

チェックアウト済みの 2 つのファイルを次のようにチェックインできます。

>cm ci -c "changed bmp and moved aselib" The selected items are about to be checked in. Please wait ... Assembling checkin data Validating checkin data Uploading file data Uploaded 0 bytes of 9.26 KB (0%) Confirming checkin operation Modified c:\Users\pablo\wkspaces\quake_path\q3radiant\Bmp.cpp Modified c:\Users\pablo\wkspaces\quake_path\common Modified c:\Users\pablo\wkspaces\quake_path\q3asm Move from c:\Users\pablo\wkspaces\quake_path\common\aselib.c to c:\Users\pablo\wkspaces\quake_path\q3asm\aselib.c Created changeset cs:577@br:/main/fix-1342@quake@localhost:6060 (mount:'/')

--all 修飾子を checkin に指定しなかったため、チェックアウト済みファイルのみがチェックインされ、Socket.cs ファイルは保留中の変更のままになります。

>cm status /main/fix-1342@quake@localhost:8084 (cs:577 - head) Changed Status Size Last Modified Path Changed 12.26 KB 5 minutes ago merge\Socket.cs

マージする

CLI からのマージは非常に簡単で、cm merge コマンドを実行するだけです。

これまでのすべての変更は main/fix-1342 ブランチで行っていたので、変更をマージするために main に切り替えます。この時点での状況は次のようになります。

CLI マージ前のステータス

main に切り替えます。

>cm switch main Performing switch operation... Searching for changed items in the workspace... Cannot perform the switch to branch/label/changeset since there are pending changes. Please review the pending changes and retry the operation again.

Socket.cs をそのままにしていたので、まだ切り替えができません。変更を取り消してから、もう一度切り替えを試みます。

>cm undo merge\Socket.cs c:\Users\pablo\wkspaces\quake_path\merge\Socket.cs unchecked out correctly >cm switch main Performing switch operation... Searching for changed items in the workspace... Setting the new selector... Plastic is updating your workspace. Wait a moment, please... Downloading block of 8 files (26.57 KB) Copied c:\Users\pablo\wkspaces\quake_path\q3radiant\Bmp.cpp Copied c:\Users\pablo\wkspaces\quake_path\code\FileSystem-renamed.cs Copied c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\sort.sbk Copied c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\spill.2bk Copied c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\spill.sbk Copied c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.1bk Copied c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.2bk Copied c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.sbk

switch コマンドによってワークスペースが更新され、ブランチ上で変更したすべてのファイルが main 内のバージョンに置き換えられます。

ステータスは次のようになります。

>cm status /main@quake@localhost:6060 (cs:573 - head)

これはブランチエクスプローラーにも反映されます。

main での CLI マージ前のステータス

ここで merge コマンドを実行します。

>cm merge main/fix-1342 The file /q3radiant/Bmp.cpp#cs:577 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/sort.sbk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/spill.2bk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/spill.sbk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/stdarg.1bk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/stdarg.2bk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/stdarg.sbk#cs:576 was modified on source and will replace the destination version The file /code/lib/FileSystem.cs#cs:575 was modified on source and will replace the destination version The item /common/aselib.c has been moved to /q3asm/aselib.c on source and will be moved as result of the merge The item /code/FileSystem-renamed.cs has been moved to /code/lib/FileSystem.cs on source and will be moved as result of the merge

修飾子なしでマージを実行すると、何がマージされるかのプレビューのみが出力されるので、これから起こることを理解するのに非常に役立ちます。

マージをもう少し面白くするために、FileSystem-renamed.cs を変更します(このファイルをブランチ上で移動して、名前変更したことを思い出してください)。

>cm co code\FileSystem-renamed.cs The selected items are about to be checked out. Please wait ... Item code\FileSystem-renamed.cs was correctly checked out >vim code\FileSystem-renamed.cs >cm ci code\FileSystem-renamed.cs The selected items are about to be checked in. Please wait ... Assembling checkin data Validating checkin data Uploading file data Uploaded 0 bytes of 2.82 KB (0%) Confirming checkin operation Modified c:\Users\pablo\wkspaces\quake_path\code\FileSystem-renamed.cs Created changeset cs:578@br:/main@quake@localhost:6060 (mount:'/')

マージを再実行し、コメントを追加します。

>cm merge main/fix-1342 -c="Added changes and fixes to the interface" The file /q3radiant/Bmp.cpp#cs:577 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/sort.sbk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/spill.2bk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/spill.sbk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/stdarg.1bk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/stdarg.2bk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/stdarg.sbk#cs:576 was modified on source and will replace the destination version The item /common/aselib.c has been moved to /q3asm/aselib.c on source and will be moved as result of the merge The item /code/FileSystem-renamed.cs has been moved to /code/lib/FileSystem.cs on source and will be moved as result of the merge The file /code/FileSystem-renamed.cs needs to be merged from cs:575 to cs:578 base cs:573. Changed by both contributors.

最後の行を見るとわかるように、FileSystem-renamed.cs は 2 人の共同作成者によって変更されたので、3 方向マージが必要です。

そこで、修飾子 --merge(マージを実際に実行するため)と --commentsfile(ファイルのコンテンツから新しい変更セットのコメントを設定するため)を merge コマンドに追加して、マージを実行します。

>cm merge main/fix-1342 --merge --commentsfile=comment-merge-fix-1342.txt The file /q3radiant/Bmp.cpp#cs:577 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/sort.sbk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/spill.2bk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/spill.sbk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/stdarg.1bk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/stdarg.2bk#cs:576 was modified on source and will replace the destination version The file /q3radiant/alpha/osf/tst/stdarg.sbk#cs:576 was modified on source and will replace the destination version The item /common/aselib.c has been moved to /q3asm/aselib.c on source and will be moved as result of the merge The item /code/FileSystem-renamed.cs has been moved to /code/lib/FileSystem.cs on source and will be moved as result of the merge The file /code/FileSystem-renamed.cs needs to be merged from cs:575 to cs:578 base cs:573. Changed by both contributors. Merging c:\Users\pablo\wkspaces\quake_path\q3asm\aselib.c c:\Users\pablo\wkspaces\quake_path\common\aselib.c has been moved to c:\Users\pablo\wkspaces\quake_path\q3asm\aselib.c Merging c:\Users\pablo\wkspaces\quake_path\code\lib\FileSystem.cs c:\Users\pablo\wkspaces\quake_path\code\FileSystem-renamed.cs has been moved to c:\Users\pablo\wkspaces\quake_path\code\lib\FileSystem.cs Merging c:\Users\pablo\wkspaces\quake_path\q3radiant\Bmp.cpp The revision c:\Users\pablo\wkspaces\quake_path\q3radiant\Bmp.cpp@cs:577 has been loaded Merging c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\sort.sbk The revision c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\sort.sbk@cs:576 has been loaded Merging c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\spill.2bk The revision c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\spill.2bk@cs:576 has been loaded Merging c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\spill.sbk The revision c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\spill.sbk@cs:576 has been loaded Merging c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.1bk The revision c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.1bk@cs:576 has been loaded Merging c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.2bk The revision c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.2bk@cs:576 has been loaded Merging c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.sbk The revision c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.sbk@cs:576 has been loaded Merging c:\Users\pablo\wkspaces\quake_path\code\lib\FileSystem.cs Merge done

ご覧のように、これによってすべてのマージがワークスペースに適用され、設定済みの 3 方向マージツール(デフォルトでは Plastic の Xmerge)が FileSystem.cs 内の競合を解決するために起動されます。どのように FileSystem.cs の移動と名前変更が正しく行われ、ファイルのコンテンツが正しくマージされているかに注目してください。

status コマンドを実行すると、マージされたすべてのファイルがチェックアウト済みステータスになっています。

>cm status /main@quake@localhost:6060 (cs:578 - head) Pending merge links Merge from cs:577 at /main/fix-1432@test@localhost:8084 Changed Status Size Last Modified Path Checked-out (Merge from 577) 41.32 KB 6 hours ago code\lib\FileSystem.cs Replaced (Merge from 577) 42.26 KB 6 hours ago q3radiant\alpha\osf\tst\sort.sbk Replaced (Merge from 577) 86.27 KB 6 hours ago q3radiant\alpha\osf\tst\spill.2bk Replaced (Merge from 577) 85.27 KB 6 hours ago q3radiant\alpha\osf\tst\spill.sbk Replaced (Merge from 577) 34.26 KB 6 hours ago q3radiant\alpha\osf\tst\stdarg.1bk Replaced (Merge from 577) 34.26 KB 6 hours ago q3radiant\alpha\osf\tst\stdarg.2bk Replaced (Merge from 577) 34.26 KB 6 hours ago q3radiant\alpha\osf\tst\stdarg.sbk Replaced (Merge from 577) 12.21 KB 6 hours ago q3radiant\Bmp.cpp Moved Status Size Similarity Path Moved 14.41 KB code\FileSystem-renamed.cs -> code\lib\FileSystem.cs Moved 88 bytes common\aselib.c -> q3asm\aselib.c

ここでは新しいステータス Replaced が使用されています。これは効率のために、バージョン管理にファイルをコピーする代わりにブランチ上の元の場所へのポインターが格納されることを意味しており、FileSystem.cs ファイルはマージされたので実際に「チェックアウト済み」としてマークされます。

この時点で、ブランチエクスプローラーは次のようになります。

マージ後、チェックイン前のステータス

点線は、マージがまだ進行中であり、まだチェックインされていないことを意味します。

あとは cm ci コマンドを使用してチェックインするだけです。

>cm ci -m "merged from fix-1342" The selected items are about to be checked in. Please wait ... Assembling checkin data Validating checkin data Uploading file data Uploaded 0 bytes of 2.80 KB (0%) Confirming checkin operation Modified c:\Users\pablo\wkspaces\quake_path\common Modified c:\Users\pablo\wkspaces\quake_path\q3asm Move from c:\Users\pablo\wkspaces\quake_path\common\aselib.c to c:\Users\pablo\wkspaces\quake_path\q3asm\aselib.c Modified c:\Users\pablo\wkspaces\quake_path\code Modified c:\Users\pablo\wkspaces\quake_path\code\lib Modified and moved from c:\Users\pablo\wkspaces\quake_path\code\FileSystem-renamed.cs to c:\Users\pablo\wkspaces\quake_path\code\lib\FileSystem.cs Modified c:\Users\pablo\wkspaces\quake_path\q3radiant Replaced c:\Users\pablo\wkspaces\quake_path\q3radiant\Bmp.cpp Replaced c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\sort.sbk Replaced c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\spill.2bk Replaced c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\spill.sbk Replaced c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.1bk Replaced c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.2bk Replaced c:\Users\pablo\wkspaces\quake_path\q3radiant\alpha\osf\tst\stdarg.sbk Created changeset cs:579@br:/main@quake@localhost:6060 (mount:'/')

ラベルの適用

新しくマージされたコードにラベルを付けるには、次のように cm label コマンドを実行します。

>cm label BL612 cs:579

ブランチエクスプローラーの表示は次のようになります。

ラベル後のステータス

利用可能なリポジトリを一覧表示する

特定のサーバー上のリポジトリをリスト表示するのは簡単で、repository [list] コマンドを使用するだけです。

>cm repository codice@localhost:6060 pnunit@localhost:6060 nervathirdparty@localhost:6060 quake@localhost:6060

デフォルトでは、repository によって default server(設定ウィザードで設定し、client.conf に書き込まれるサーバー)内のリポジトリが表示されます。

> type client.conf <ClientConfigData> <Language>en</Language> <WorkspaceServer>localhost:6060</WorkspaceServer> <WorkingMode>UPWorkingMode</WorkingMode> <SecurityConfig>pablo:dM629yb8hWO6qD+8jAqaag==</SecurityConfig> <CurrentWorkspace>c:\Users\pablo\wkspaces\four</CurrentWorkspace> <MergeTools> <MergeToolData> <FileExtensions>.cs</FileExtensions> <Tools> ...

次のように別のサーバーも入力できるので、repository list コマンドはサーバーでの接続の問題を診断するのに非常に役立ちます。

>cm repository list tube:dianaserver@codice.es --format=TABLE 4 codice tube:dianaserver@codice.es 4_1 codice/unitymerge tube:dianaserver@codice.es 5 pnunit tube:dianaserver@codice.es 6 nervathirdparty tube:dianaserver@codice.es 6_1 nervathirdparty/yamldotnet tube:dianaserver@codice.es 6_2 nervathirdparty/yamldotnet_buildutils tube:dianaserver@codice.es 35 licensetools tube:dianaserver@codice.es 55 plasticscm.com tube:dianaserver@codice.es 64 indexertest tube:dianaserver@codice.es 1741 tts tube:dianaserver@codice.es

利用可能なワークスペースを一覧表示する

Plastic SCM では、ユーザーのマシン上にあるワークスペース(少なくとも Plastic SCM によって認識されているもの。ユーザーは常にどこかからワークスペースをコピーすることができ、それは Plastic のリストには含まれないため)のリストが保持されます。

>cm workspace list codebase@MODOK c:\Users\pablo\wkspaces\four doc@MODOK c:\Users\pablo\wkspaces\doc mkt@MODOK c:\Users\pablo\wkspaces\marketing quakecode@MODOK c:\Users\pablo\wkspaces\testwkspaces\quakewk codicediana@MODOK c:\Users\pablo\wkspaces\codicediana

ヘルプを取得する

このガイドでは、CLI を使用してできるすべてのことのほんの一部を紹介します。他にどのようなコマンドを使用できるかについては、cm showcommands を実行して確認できます。

また、すべてのコマンドで cm <command> --usage を使用してそれぞれのオプションに関する組み込みのドキュメントを確認することも、cm <command> --help を使用してより包括的なヘルプを例とともに確認することもできます。

CLI が期待通りに動作しない場合は、Plastic のサポートチームにお問い合わせください。サポートチームが問題を診断するのを支援するために、有用な診断情報が入っている zip ファイルを送信してください。zip ファイルは、次のように cm support を使用して生成できます。

>cm support bundle c:\supportbundle.zip Creating a new support bundle... Adding clientinfo.txt... Adding clientprocessinfo.txt... Adding client.conf... Adding filetypes.conf... Adding guiclient.conf... Adding mergetool.conf... Adding plastic.uisettings.conf... Adding plasticgui.conf... Adding syncviews.conf... Adding logs\plastic.debug.log.txt... Adding logs\plastic.relevant.log.txt... Support bundle created at c:\supportbundle.zip CommandResult 0

ローカルの変更

ローカルの移動と削除を含む、大量の変更をソースファイルに加えるスクリプトを実行しました。status は次のようになっています。

>cm status /main@quake@localhost:6060 (cs:578 - head) Deleted Status Size Path Removed locally 34.26 KB q3radiant\alpha\osf\tst\stdarg.sbk Moved Status Size Similarity Path Moved locally 88 bytes 100% q3asm\aselib.c -> q3asm\aselib_fixed.c

ファイルが移動または削除されているこの時点で、これらの変更をソース管理下に置くにはどうすればよいでしょうか?問題ありません。move または remove コマンドを実行し、管理対象の変更を作成するだけです。

>cm remove q3radiant\alpha\osf\tst\stdarg.sbk Item q3radiant\alpha\osf\tst\stdarg.sbk has been removed. >cm move q3asm\aselib.c -> q3asm\aselib_fixed.c q3asm\aselib.c has been moved to q3asm\aselib_fixed.c >cm status /main@quake@localhost:6060 (cs:578 - head) Deleted Status Size Path Removed 34.26 KB q3radiant\alpha\osf\tst\stdarg.sbk Moved Status Size Similarity Path Moved 88 bytes q3asm\aselib.c -> q3asm\aselib_fixed.c

変更をシェルブする

私はいくつかの実験的なコード変更を行っているのですが、それらをソース管理内に保存して、同僚と共有できるようにしたいと考えています。ただし、まだ実験段階のアイデアなので、いずれのブランチにもチェックインはしたくありません。

このような場合、私は shelveset コマンドを使用して、いずれのブランチにも関連付けられていない変更セットをコミットします。

>cm shelveset src\experimental_changes Uploading file data Confirming checkin operation Modified src\experimental_changes Created shelve sh:25@myrepo@localhost:8080 (mount:'/')

私はリポジトリでの自分のローカルの変更をシェルブしました。私は自分のブランチを別のワークスペースに切り替え、通常と同じように作業を続けています。後で、前に作業していた実験的変更に戻りたいと考えています。これを行う場合、私は apply サブコマンドを使用して、シェルブセットを自分のワークスペースに適用します。

>cm shelveset apply sh:25 The item /newtonraphson.cs#sh:25 has been added on source and will be added as result of the merge Merging \src\experimental_changes\newtonraphson.cs The revision \src\experimental_changes\newtonraphson.cs@sh:25 has been loaded

パイプを使用する

Plastic CLI の機能の中でも見過ごされがちな機能なのですが、- オプションを使用して、stdin から引数を 1 つずつ読み取る機能があります。次に例を示します。

>cm add - a.txt b.txt c.txt The selected items are about to be added. Please wait ... Item c:\Users\pablo\wkspaces\mcga\a.txt was correctly added Item c:\Users\pablo\wkspaces\mcga\b.txt was correctly added Item c:\Users\pablo\wkspaces\mcga\c.txt was correctly added >cm ci - a.txt b.txt c.txt The selected items are about to be checked in. Please wait ... \ Checkin finished 12 bytes/12 bytes [##################################] 100 % Modified c:\mcga Added c:\Users\pablo\wkspaces\mcga\a.txt Added c:\Users\pablo\wkspaces\mcga\b.txt Added c:\Users\pablo\wkspaces\mcga\c.txt Created changeset cs:22@br:/main@test@localhost:8084 (mount:'/') >cm rm - a.txt Item a.txt has been removed. b.txt Item b.txt has been removed. c.txt Item c.txt has been removed.

これがなぜ便利かというと、他のコマンドからの出力を cm 内に送ることができるからです。

パイプを使ったパスが受け入れられるのは、次のコマンドです。

  • add
  • applylocalchanges
  • checkin
  • checkout
  • getstatus
  • partialcheckin
  • remove
  • shelveset create
  • undocheckout
  • undochange
  • uncounchanged
  • wktreenodestatus

いくつか例を見てみましょう。

  • たとえば、Windows の dir コマンドからパイプを使用して、パターンに一致するすべてのファイルをワークスペースから簡単に削除することもできます。 >dir /S /B *.txt | cm rm - Item c:\Users\pablo\wkspaces\mcga\a.txt has been removed. Item c:\Users\pablo\wkspaces\mcga\b.txt has been removed. Item c:\Users\pablo\wkspaces\mcga\c.txt has been removed. Item c:\Users\pablo\wkspaces\mcga\z.txt has been removed. Item c:\Users\pablo\wkspaces\mcga\lockwkB\file.txt has been removed. Item c:\Users\pablo\wkspaces\mcga\src_dir\dest_dir\a.txt has been removed. Item c:\Users\pablo\wkspaces\mcga\src_dir\dest_dir\b.txt has been removed. Item c:\Users\pablo\wkspaces\mcga\src_dir\dest_dir\c.txt has been removed.
  • checkout コマンドを、送られたディレクトリ引数に対して再帰的に実行することもできます。 Directory of c:/mcga/pipe 11/05/2020 19:48 <DIR> . 11/05/2020 19:48 <DIR> .. 11/05/2020 17:57 <DIR> dir 11/05/2020 19:46 <DIR> dir2 11/05/2020 19:47 12 dirlist 1 File(s) 12 bytes 4 Dir(s) 23,714,631,680 bytes free c:/mcga/pipe>type dirlist dir dir2 c:/mcga/pipe>type dirlist | cm partial co -r - The selected items are about to be checked out. Please wait ... Item c:/mcga/pipe/dir was correctly checked out Item c:/mcga/pipe/dir/file was correctly checked out Item c:/mcga/pipe/dir2 was correctly checked out Item c:/mcga/pipe/dir2/file2 was correctly checked out

皆さんも、パイプと cm を使って便利なスクリプトを作成してみてください。


最終更新

2020 年 6 月 10 日
  • パイプの使用」の章に、送られたディレクトリ引数に対して checkout コマンドを再帰的に実行する方法についての例を追加しました。
2020 年 6 月 8 日
  • cm status の出力にデフォルトでヘッド変更セットが含まれるようになったため、例を編集しました。
2020 年 1 月 21 日
2019 年 5 月 16 日
  • Plastic CLI でのパイプの使用に関するセクションを追加しました。
2019 年 3 月 26 日
  • 変更の取り消し方法の例を、新しい cm undo コマンドを使用するように更新しました。
2019 年 5 月 14 日
  • 非推奨となったワークスペース管理コマンド(cm mkwk など)に関する説明を、新しい代替機能の説明に置き換えました。
2019 年 3 月 22 日
  • 非推奨となったリポジトリ管理コマンド(cm lrep など)に関する説明を、新しい代替機能の説明に置き換えました。
  • 非推奨となった cm mkbr コマンドを cm branch に置き換えるために、「新規ブランチを作成し、そのブランチに切り替える」の章を編集しました。
2019 年 3 月 21 日
  • cm shelveset コマンドを使用した変更のシェルブに関するセクションを更新しました。
2019 年 3 月 13 日
  • CLI の新しいラベル関連のコマンドの導入に伴い、本文中の cm mklabel の説明を cm label に変更しました。
2019 年 2 月 8 日
  • ガイド全体で、新しい出力形式とオプションの変更を反映するために cm status の出力を更新しました。
  • cm status --head を使用してヘッド変更セットを表示する方法を説明するために、「新規ワークスペースを作成する」の章を編集しました。
  • cm support を使用して診断情報を生成する方法を説明するために、新しい章「ヘルプを取得する」を追加しました。
  • cm mvcm rm を使用してローカルの変更をソース管理下に置く方法を説明するために、新しい章「ローカルの変更」を追加しました。
  • 例に含まれるいくつかのパスを読みやすいように短くしました。
2018 年 9 月 4 日
  • マージ操作中にコメントを含める方法(-c 修飾子と --commentsfile 修飾子)を説明するために、「マージ」の章を編集しました。
2018 年 2 月 26 日
  • Plastic でサポートされているさまざまなオブジェクト指定の定義を確認するには、cm help objectspec コマンドを実行します。
2015 年 8 月 24 日
  • cm log と cm diff の例が更新され、これらのコマンドでワークスペースのフルパスではなく、ワークスペースのルートの相対パスがデフォルトで出力されるようになりました。
  • lrep および lwk コマンドの形式文字列を改善しました。