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 つあります。
-
Perforce(p4 編集)または ClearCase(チェックアウト)を使用していたために、この方法に慣れています。この方法で操作する場合は、ワークスペースで保護のためにファイルを読み取り専用に設定することをお勧めします。こうしておくと、ファイルをチェックアウトする前に変更するとファイルシステムによって警告されます。
- 排他的チェックアウト(ロック)を使用する必要がある場合は、ファイルを編集する前にチェックアウトする必要があります。ロックの詳細については、こちらをご覧ください。
- 大規模なコードベース(ファイル数 > 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 に切り替えます。この時点での状況は次のようになります。
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)
これはブランチエクスプローラーにも反映されます。
ここで 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 mv と cm rm を使用してローカルの変更をソース管理下に置く方法を説明するために、新しい章「ローカルの変更」を追加しました。
例に含まれるいくつかのパスを読みやすいように短くしました。
2018 年 9 月 4 日
マージ操作中にコメントを含める方法(-c 修飾子と --commentsfile 修飾子)を説明するために、「マージ」の章を編集しました。
2018 年 2 月 26 日
Plastic でサポートされているさまざまなオブジェクト指定の定義を確認するには、cm help objectspec コマンドを実行します。
2015 年 8 月 24 日
cm log と cm diff の例が更新され、これらのコマンドでワークスペースのフルパスではなく、ワークスペースのルートの相対パスがデフォルトで出力されるようになりました。
lrep および lwk コマンドの形式文字列を改善しました。