TortoiseSVN コマンドラインで作業を効率化・自動化

TortoiseSVN コマンドラインで作業を効率化・自動化

TortoiseSVN は Windows 環境で Subversion (SVN) を利用する上で、非常に広く使われている GUI クライアントです。ファイルのステータスをアイコンで表示したり、右クリックメニューから様々な SVN 操作を直感的に行えるため、多くのユーザーにとって SVN の利用を容易にしてくれます。

しかし、日常的な SVN 作業の中には、繰り返し行う必要のある定型的な作業や、複数のステップをまとめて実行したい作業があります。例えば、毎日の作業終了時に特定のディレクトリを更新してからコミットする、特定のブランチを定期的にチェックアウトしてビルドスクリプトを実行するなどです。このような作業を GUI で毎回手動で行うのは非効率です。

ここで TortoiseSVN のコマンドラインインターフェース (CLI) である TortoiseProc.exe が役立ちます。TortoiseProc.exe を利用することで、 TortoiseSVN の多くの機能をコマンドプロンプトやバッチファイル、その他のスクリプトから呼び出すことが可能になります。これにより、SVN 作業の効率化自動化を実現できます。

本記事では、TortoiseProc.exe の基本的な使い方から、主要なコマンドの詳細な説明、そしてバッチファイルやスクリプトに組み込んで自動化を行う方法までを、具体的な例を交えながら徹底的に解説します。TortoiseSVN GUI の便利さはそのままに、さらに一歩進んだ SVN 活用を目指しましょう。

1. TortoiseProc.exe とは何か? svn.exe との違い

まず理解しておくべき重要な点として、TortoiseProc.exe は Subversion 自体のコマンドラインツールである svn.exe とは異なります。

  • svn.exe: Subversion 本家が提供する、純粋なコマンドラインクライアントです。コマンドプロンプトから svn update, svn commit, svn checkout などのコマンドを直接実行し、SVN リポジトリと非対話的に(ダイアログを表示せずに)やり取りできます。主にサーバーサイドでのスクリプト実行や、完全に自動化されたバッチ処理、CI/CD パイプラインでの利用に適しています。認証情報などもコマンドライン引数や設定ファイルで渡すことができます。

  • TortoiseProc.exe: TortoiseSVN が提供するコマンドラインインターフェースです。これは、TortoiseSVN のGUI ダイアログをコマンドラインから呼び出すためのツールです。例えば、TortoiseProc.exe /command:update /path:"C:\working_copy" を実行すると、指定されたパスに対して TortoiseSVN の「更新」ダイアログが表示されます(通常は更新処理が実行され、結果ウィンドウが表示されます)。基本的にユーザーの操作や確認を伴うことを前提としています。

したがって、TortoiseProc.exe は Subversion 操作を完全にバックグラウンドで非対話的に行いたい場合には不向きです。しかし、GUI の便利さを利用しつつ、特定の作業ステップを自動化したい、繰り返し行う定型作業をコマンド一発で開始したい、といった半自動化定型作業のトリガーとしては非常に強力です。

本記事では、この TortoiseProc.exe に焦点を当てて解説を進めます。

2. TortoiseProc.exe の基本的な使い方

TortoiseProc.exe は通常、TortoiseSVN をインストールしたディレクトリにあります(例: C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe)。システム環境変数 PATH に TortoiseSVN の bin ディレクトリを追加しておくと、コマンドプロンプトのどこからでも TortoiseProc.exe と入力するだけで実行できるようになり便利です。

基本的なコマンドの構文は以下のようになります。

batch
TortoiseProc.exe /command:<コマンド名> [/parameter1 "値1"] [/parameter2 "値2"] ...

  • /command:<コマンド名>: 実行したい TortoiseSVN の操作を指定します。例えば update, commit, log, checkout などです。
  • /parameter "値": 各コマンドに必要なパラメータを指定します。例えば、操作対象のパスは /path、リポジトリの URL は /url、コミットメッセージは /logmsg などです。パラメータ名と値の間は : ではなくスペースであることに注意してください。値にスペースが含まれる場合は、ダブルクォーテーション (") で囲みます。

コマンド名とパラメータは、大文字・小文字を区別しません。例えば /command:update/command:UPDATE と同じです。

パラメータの指定順序は通常自由です。

3. 主なコマンド一覧と概要

TortoiseProc.exe で利用できる主なコマンドとその概要を以下に示します。これらのコマンドは、通常 TortoiseSVN の右クリックメニューから実行できる操作に対応しています。

コマンド名 説明 対応する GUI 操作
about TortoiseSVN のバージョン情報ダイアログを表示します。 ヘルプ -> TortoiseSVN について
add ファイルやディレクトリをバージョン管理に追加します。 追加
blame ファイルの各行の最終コミット情報 (誰が、いつコミットしたか) を表示します。 TortoiseSVN -> Blame (履歴表示)
branch ブランチ/タグを作成します。 TortoiseSVN -> Branch/Tag
checkout リポジトリから作業コピーを作成します。 SVN Checkout…
cleanup 作業コピーをクリーンアップします (ロック解除、未完了操作の復帰など)。 TortoiseSVN -> Cleanup
commit 作業コピーの変更をリポジトリにコミットします。 SVN Commit…
delete ファイルやディレクトリをバージョン管理から削除します。 TortoiseSVN -> Delete
diff ファイルやディレクトリの差分を表示します。 TortoiseSVN -> Diff
export リポジトリや作業コピーを、SVN 管理ファイルを含まないクリーンな状態でエクスポートします。 SVN Export…
import ローカルのディレクトリツリーをリポジトリにインポートします。 TortoiseSVN -> Import
lock ファイルをロックします。 TortoiseSVN -> Get Lock…
log リビジョンログ (変更履歴) を表示します。 TortoiseSVN -> Show Log
merge 他のブランチやリビジョン範囲の変更を作業コピーにマージします。 TortoiseSVN -> Merge
properties ファイルやディレクトリのプロパティを表示/編集します。 TortoiseSVN -> Properties
relove コンフリクトが発生したファイルを解決済みとしてマークします。 TortoiseSVN -> Resolved
reponew 新しいローカルリポジトリを作成します。 リポジトリ作成… (TortoiseSVN のインストール先 bin フォルダにあるツール)
rename ファイルやディレクトリの名前を変更します。 TortoiseSVN -> Rename…
revert 作業コピーの変更を元に戻します。 TortoiseSVN -> Revert…
settings TortoiseSVN の設定ダイアログを表示します。 設定
switch 作業コピーを他のブランチやタグに切り替えます。 TortoiseSVN -> Switch/Move…
unlock ファイルのロックを解除します。 TortoiseSVN -> Release Locks…
update 作業コピーをリポジトリの最新状態に更新します。 SVN Update
updatefordiff 差分表示のために一時的な更新を行います。 差分 -> 差分を表示 (Unified diff) の際に内部的に利用される

これらのコマンドについて、次項でより詳細なパラメータと使用例を見ていきます。

4. 主要コマンドの詳細と実践的な使い方

ここでは、特によく利用されるコマンドについて、使用例を交えて詳しく解説します。

4.1. Update (更新)

作業コピーを指定したリビジョン(通常は HEAD リビジョン)に更新します。

batch
TortoiseProc.exe /command:update /path:"C:\working_copy\project"

  • /path:"<パス>": 更新したい作業コピーのパスを指定します。ファイルパスでもディレクトリパスでも指定できます。通常はディレクトリを指定します。複数のパスを指定する場合は、セミコロン (;) で区切ります。例: /path:"C:\wc1;C:\wc2"
  • /revision:<リビジョン番号>|<リビジョンキーワード>: 特定のリビジョンに更新したい場合に指定します。省略した場合は HEAD リビジョン (HEAD) に更新されます。リビジョン番号 (123) やキーワード (BASE, COMMITTED, PREV) を指定できます。
  • /nonrecursive: ディレクトリを指定した場合に、そのディレクトリ直下のみを更新し、サブディレクトリを更新しない場合に指定します。
  • /ignoreexternals: svn:externals プロパティで定義された外部リポジトリを更新しない場合に指定します。
  • /closeonend:<0|1|2|3>: 更新処理が終了した後のダイアログの動作を指定します。
    • 0: 処理終了後もダイアログを開いたままにします。
    • 1: エラーが発生した場合のみダイアログを開いたままにします。
    • 2: 処理が成功または警告で終了した場合はダイアログを閉じます。エラーの場合は開いたままです。
    • 3: 常にダイアログを閉じます。スクリプトで自動化する場合によく使われます。デフォルトは 0 です。

使用例:

  • 作業コピー全体を最新に更新し、終了時にダイアログを自動で閉じる:
    batch
    TortoiseProc.exe /command:update /path:"C:\projects\my_project" /closeonend:3
  • 特定のサブディレクトリのみをリビジョン 500 に更新する:
    batch
    TortoiseProc.exe /command:update /path:"C:\projects\my_project\docs" /revision:500 /closeonend:3

4.2. Commit (コミット)

作業コピーの変更をリポジトリにコミットします。

batch
TortoiseProc.exe /command:commit /path:"C:\working_copy\project"

  • /path:"<パス>": コミットしたいファイルまたはディレクトリのパスを指定します。複数のパスはセミコロンで区切ります。指定しない場合は、作業コピー全体の変更が対象となります(コマンド実行時のカレントディレクトリが使われることが多いですが、明示的に指定するのが安全です)。
  • /logmsg:"<コミットメッセージ>": コミットメッセージを直接指定します。このパラメータを指定しない場合、コミットメッセージ入力ダイアログが表示され、ユーザーの入力を待ちます。
  • /logmsgfile:"<ファイルパス>": コミットメッセージを記述したテキストファイルのパスを指定します。これも /logmsg と同様、指定しない場合はダイアログ表示になります。/logmsg/logmsgfile の両方が指定された場合、通常 /logmsg が優先されます。
  • /revprop:"<プロパティ名>:<プロパティ値>": コミットプロパティ (リビジョンプロパティ) を設定します。例: /revprop:"svn:author:new_author"。複数指定する場合は、セミコロンで区切ります。例: /revprop:"svn:author:new_author;myprop:myvalue"
  • /no-unlock: コミット後もロックを解除しない場合に指定します。
  • /nopopup: コミットが成功した際に表示される成功通知ポップアップを表示しない場合に指定します(通常、/closeonend と組み合わせて使われます)。
  • /closeonend:<0|1|2|3>: コミット処理が終了した後のダイアログの動作を指定します(Update コマンドと同じ)。通常、/logmsg または /logmsgfile を指定してメッセージ入力をスキップさせ、/closeonend:3 を指定してダイアログを自動で閉じます。

使用例:

  • 特定のファイル群をコミットし、コミットメッセージを入力ダイアログで指定する:
    batch
    TortoiseProc.exe /command:commit /path:"C:\projects\my_project\file1.txt;C:\projects\my_project\folder\file2.c"

    (このコマンドを実行すると、コミットダイアログが表示され、file1.txt と file2.c がチェックされた状態で表示されます。ユーザーはメッセージを入力してコミットボタンをクリックします。)

  • 特定のディレクトリの変更を、指定したメッセージでコミットし、終了時に自動で閉じる:
    batch
    TortoiseProc.exe /command:commit /path:"C:\projects\my_project" /logmsg:"Fixed issue #123: Resolved login bug." /closeonend:3

    (このコマンドは、コミットメッセージダイアログを表示せずにコミット処理を実行します。これは自動化に非常に便利ですが、コミット対象ファイルが未選択状態になるため、コミットされるのは GUI で前回チェックされたファイルなど、TortoiseSVN の内部状態に依存する可能性があります。より確実に特定のファイルのみをコミットしたい場合は、/path で具体的にファイルパスを指定する必要があります。)

  • コミット対象のディレクトリを指定し、メッセージをファイルから読み込み、終了時に閉じる:
    batch
    TortoiseProc.exe /command:commit /path:"C:\projects\my_project" /logmsgfile:"C:\temp\commit_message.txt" /closeonend:3

注意点: /logmsg/logmsgfile を指定した場合でも、もしコミット対象がない場合や、コンフリクトがある場合など、コミット処理に進めない状況ではダイアログが表示されることがあります。また、どのファイルをコミット対象とするかは、/path で明示的に指定しない限り、前回のコミットダイアログの状態などを引き継ぐ場合があり、意図しないファイルがコミットされる可能性があります。完全に自動化したい場合は、svn.exe を利用し、svn commit --depth empty--targets オプションを適切に使う方が安全です。TortoiseProc.execommit コマンドは、あくまで「コミットダイアログを表示してユーザーに操作させる」トリガーとして使うのが最も確実です。

4.3. Log (ログ表示)

リビジョンログを表示します。

batch
TortoiseProc.exe /command:log /path:"C:\working_copy\project"

  • /path:"<パス>": ログを表示したいファイルまたはディレクトリのパスを指定します。複数のパスはセミコロンで区切ります。
  • /revision:<開始リビジョン>[:<終了リビジョン>]: 表示するリビジョンの範囲を指定します。例: /revision:100:200 または /revision:HEAD:100。単一のリビジョンを指定することも可能です。
  • /limit:<件数>: 表示するログの最大件数を指定します。最新から指定件数分のログが表示されます。
  • /autor:"<作者名>": 指定した作者のコミットのみを表示します。
  • /msgfilter:"<キーワード>": コミットメッセージに指定したキーワードが含まれるコミットのみを表示します。
  • /startdate:"<日付>": 指定した日付以降のコミットのみを表示します。日付形式は YYYY-MM-DDYYYY-MM-DD HH:MM:SS などが使えます。
  • /enddate:"<日付>": 指定した日付以前のコミットのみを表示します。
  • /FindText:"<検索文字列>": ログダイアログを開いた際に、指定した文字列で検索を実行します。
  • /FindTextOptions:<数値>: /FindText と組み合わせて、検索オプション (大文字小文字区別、正規表現など) を指定します。詳細は TortoiseSVN のドキュメントを参照してください。
  • /outfile:"<ファイルパス>": ログの内容をテキストファイルに保存します。このオプションは、ログダイアログを開かずに直接ファイルに保存する場合に便利です。

使用例:

  • 作業コピーのログを表示する:
    batch
    TortoiseProc.exe /command:log /path:"C:\projects\my_project"
  • 特定のファイルのリビジョン 100 から 200 までのログを表示する:
    batch
    TortoiseProc.exe /command:log /path:"C:\projects\my_project\main.c" /revision:100:200
  • 最新 50 件のログを表示し、”Fix” という単語を含むメッセージのみに絞り込む:
    batch
    TortoiseProc.exe /command:log /path:"C:\projects\my_project" /limit:50 /msgfilter:"Fix"
  • 特定のディレクトリのログをファイルに保存する:
    batch
    TortoiseProc.exe /command:log /path:"C:\projects\my_project\docs" /outfile:"C:\temp\docs_log.txt"

    注意点: /outfile はログダイアログを表示せずにファイルに保存する非対話的なオプションに見えますが、内部的にはログダイアログを開いてから保存処理を行っているため、状況によってはダイアログが一瞬表示されることがあります。また、保存される形式は TortoiseSVN のログダイアログで「ファイルへ保存」を選んだ場合と同じテキスト形式になります。完全に非対話的にログを XML 形式などで取得したい場合は、svn.exe log --xml コマンドを利用する方が適しています。

4.4. Diff (差分表示)

ファイルやディレクトリの差分を表示します。

batch
TortoiseProc.exe /command:diff /path:"C:\working_copy\project\file.c"

  • /path:"<パス>": 差分を表示したいファイルまたはディレクトリのパスを指定します。作業コピー内の変更との差分を表示する場合に使います。
  • /path1:"<パス1>": 比較対象のファイルまたはディレクトリのパス1。
  • /path2:"<パス2>": 比較対象のファイルまたはディレクトリのパス2。/path/path1//path2 は通常排他的に使用されます。/path は作業コピー内の変更と BASE リビジョンとの差分を表示する場合などに使います。
  • /revision1:<リビジョン番号>|<リビジョンキーワード>: /path1 のリビジョンを指定します。省略した場合は BASE リビジョンなどが使われます。
  • /revision2:<リビジョン番号>|<リビジョンキーワード>: /path2 のリビジョンを指定します。省略した場合は HEAD リビジョンなどが使われます。
  • /unified: 差分を unified diff 形式で表示します。通常は TortoiseSVN の差分ビューアが表示されます。
  • /output:"<ファイルパス>": 差分をファイルに保存します。/unified と組み合わせて使われることが多いです。

使用例:

  • 作業コピー内の main.c の変更と BASE リビジョンとの差分を表示する:
    batch
    TortoiseProc.exe /command:diff /path:"C:\projects\my_project\main.c"
  • リポジトリ上の同じファイルの特定リビジョン間の差分を表示する (作業コピーは不要):
    batch
    TortoiseProc.exe /command:diff /path1:"http://svn.example.com/repo/trunk/file.c" /revision1:100 /path2:"http://svn.example.com/repo/trunk/file.c" /revision2:200

    (/path1/path2 にリポジトリ URL を指定することで、リポジトリ間の差分やリポジトリ内のファイル間の差分なども表示できます。)
  • 作業コピー内のディレクトリ全体のリビジョン 150 と HEAD リビジョンとの差分を表示する:
    batch
    TortoiseProc.exe /command:diff /path1:"C:\projects\my_project" /revision1:150 /path2:"C:\projects\my_project" /revision2:HEAD

    (これは作業コピーのファイルの状態を比較するわけではなく、リビジョン 150 時点のファイルの状態と HEAD リビジョン時のファイルの状態を作業コピー上で一時的に再現して比較する動作になります。)
  • 作業コピー内の readme.txt の差分を unified diff 形式でファイルに保存する:
    batch
    TortoiseProc.exe /command:diff /path:"C:\projects\my_project\readme.txt" /unified /output:"C:\temp\readme_diff.patch"

    注意点: /path だけでディレクトリを指定した場合の動作は、GUI でディレクトリを右クリックして「差分を表示」を選んだ場合と同じく、変更されたファイルの一覧が表示され、そこからファイルを選んで差分を見る形になります。完全に自動でディレクトリ内の全変更差分をファイルに出力したい場合は、/unified オプションを使い、/path でファイルパスを個別に指定するか、svn.exe diff コマンドを利用する必要があります。

4.5. Blame (履歴表示)

ファイルの各行の最終コミット情報を表示します。

batch
TortoiseProc.exe /command:blame /path:"C:\working_copy\project\file.c"

  • /path:"<パス>": Blame 情報を表示したいファイルのパスを指定します。
  • /revision:<リビジョン番号>|<リビジョンキーワード>: 指定したリビジョン時点でのファイルの Blame 情報を表示します。省略した場合は HEAD リビジョンになります。
  • /endrevision:<リビジョン番号>|<リビジョンキーワード>: 履歴をさかのぼる際に、指定したリビジョンまでで停止します。
  • /ignorewhitespaces: 空白文字の変更を無視して blame 情報を表示します。
  • /usecache: 可能であればキャッシュを使用して高速化します。
  • /outfile:"<ファイルパス>": Blame の結果をファイルに保存します。

使用例:

  • 作業コピー内の utils.py の Blame 情報を表示する:
    batch
    TortoiseProc.exe /command:blame /path:"C:\projects\my_project\utils.py"
  • 特定のファイルのリビジョン 300 時点での Blame 情報を表示し、結果をファイルに保存する:
    batch
    TortoiseProc.exe /command:blame /path:"C:\projects\my_project\config.ini" /revision:300 /outfile:"C:\temp\config_blame_r300.txt"

4.6. Checkout (チェックアウト)

リポジトリから作業コピーを作成します。

batch
TortoiseProc.exe /command:checkout /url:"http://svn.example.com/repo/trunk" /path:"C:\new_working_copy"

  • /url:"<リポジトリURL>": チェックアウトしたいリポジトリの URL を指定します。
  • /path:"<パス>": チェックアウト先のローカルディレクトリのパスを指定します。存在しないディレクトリでも構いません(TortoiseSVN が作成します)。
  • /revision:<リビジョン番号>|<リビジョンキーワード>: 特定のリビジョンをチェックアウトしたい場合に指定します。省略した場合は HEAD リビジョンになります。
  • /nonrecursive: 指定した URL の直下のみをチェックアウトし、サブディレクトリをチェックアウトしない場合に指定します。
  • /ignoreexternals: svn:externals プロパティで定義された外部リポジトリをチェックアウトしない場合に指定します。
  • /username:"<ユーザー名>": SVN 認証が必要な場合にユーザー名を指定します。パスワードはダイアログで入力する必要があります。完全に自動化する場合は svn.exe を使うべきです。
  • /password:"<パスワード>": SVN 認証が必要な場合にパスワードを指定します。コマンドラインにパスワードを平文で書くのはセキュリティリスクがあるため、非対話的な自動化には非推奨です。
  • /closeonend:<0|1|2|3>: 処理終了後のダイアログ動作を指定します(Update コマンドと同じ)。

使用例:

  • トランクの最新状態を新しいディレクトリにチェックアウトする:
    batch
    TortoiseProc.exe /command:checkout /url:"http://svn.example.com/repo/trunk" /path:"C:\Work\project_trunk" /closeonend:3
  • タグのリビジョン 5000 を特定のディレクトリにチェックアウトする:
    batch
    TortoiseProc.exe /command:checkout /url:"http://svn.example.com/repo/tags/release-1.0" /path:"C:\Work\release_build" /revision:5000 /closeonend:3
  • ユーザー名とパスワードを指定してチェックアウトする (非推奨):
    batch
    TortoiseProc.exe /command:checkout /url:"http://svn.example.com/repo/trunk" /path:"C:\Work\project_trunk" /username:"myuser" /password:"mypass" /closeonend:3

    (繰り返しますが、パスワードをコマンドライン引数で渡すのはセキュリティ上避けるべきです。ユーザー名を指定してもパスワードダイアログが表示される可能性はあります。)

4.7. Switch (切り替え)

作業コピーを、リポジトリ内の他のブランチやタグ、あるいはリポジトリの別の場所へ切り替えます。

batch
TortoiseProc.exe /command:switch /path:"C:\working_copy\project" /url:"http://svn.example.com/repo/branches/feature-branch"

  • /path:"<パス>": 切り替えたい作業コピーのパスを指定します。
  • /url:"<新しいリポジトリURL>": 切り替え先の新しいリポジトリ URL を指定します。通常、作業コピーの存在するリポジトリ内の別の場所を指定します。
  • /revision:<リビジョン番号>|<リビジョンキーワード>: 切り替えたい新しい URL の特定リビジョンを指定します。省略した場合は HEAD リビジョンになります。
  • /ignoreexternals: 外部リポジトリを更新しない場合に指定します。
  • /closeonend:<0|1|2|3>: 処理終了後のダイアログ動作を指定します(Update コマンドと同じ)。

使用例:

  • 作業コピーをトランクからフィーチャーブランチに切り替える:
    batch
    TortoiseProc.exe /command:switch /path:"C:\projects\my_project" /url:"http://svn.example.com/repo/branches/feature-xyz" /closeonend:3
  • 作業コピーを現在のブランチからリリース 1.5 のタグに切り替える:
    batch
    TortoiseProc.exe /command:switch /path:"C:\projects\my_project" /url:"http://svn.example.com/repo/tags/release-1.5" /closeonend:3

4.8. Merge (マージ)

他のブランチやリビジョン範囲の変更を作業コピーにマージします。TortoiseSVN のマージ機能は強力で様々なシナリオに対応していますが、コマンドラインから呼び出す場合は主にマージダイアログを表示させる用途になります。完全に非対話的なマージは svn.exe を使うべきです。

batch
TortoiseProc.exe /command:merge /path:"C:\working_copy\project"

  • /path:"<パス>": マージ先の作業コピーのパスを指定します。
  • /url:"<マージ元URL>": マージ元のリポジトリ URL を指定します。これは「特定の URL のログを表示してそのリビジョンをマージする」タイプのマージ(リビジョン範囲のマージ)で使われるパラメータです。
  • /revision:<リビジョン範囲>|<リビジョン番号>|<リビジョンキーワード>: /url と組み合わせて、マージしたいリビジョン範囲を指定します。例: /revision:100:200 または /revision:250
  • /fromurl:"<マージ元ブランチのURL>": マージの種類として「2つの異なるURLをマージ」を選択した場合のマージ元URLを指定します。
  • /tourl:"<マージ先ブランチのURL>": マージの種類として「2つの異なるURLをマージ」を選択した場合のマージ先URLを指定します。通常、マージ先の作業コピー (/path) はこの /tourl に対応するものであるべきです。
  • /logmsg:"<コミットメッセージ>": マージ後のコミットメッセージを指定します。マージが成功した場合、このメッセージで自動的にコミットされます。指定しない場合はマージ後にコミットダイアログが表示されます。
  • /closeonend:<0|1|2|3>: 処理終了後のダイアログ動作を指定します(Update コマンドと同じ)。

使用例:

  • 現在のブランチ(作業コピー)に、トランクのログを見ながらマージしたいリビジョンを選ぶダイアログを表示する:
    batch
    TortoiseProc.exe /command:merge /path:"C:\projects\my_branch_wc" /url:"http://svn.example.com/repo/trunk"

    (これは TortoiseSVN の「リビジョン範囲をマージ」ダイアログを開き、マージ元 URL にトランクが、マージ先作業コピーにブランチの作業コピーが設定された状態になります。ユーザーはログを見てマージしたいリビジョンを選択します。)

  • 特定のブランチから現在のブランチに、リビジョン 300 から 400 の範囲をマージするダイアログを表示する:
    batch
    TortoiseProc.exe /command:merge /path:"C:\projects\my_branch_wc" /url:"http://svn.example.com/repo/branches/feature-A" /revision:300:400

    (これもダイアログを表示します。自動でマージ実行まで進めたい場合は、さらにオプションが必要です。)

  • ブランチ A とブランチ B の差分を、現在の作業コピーにマージするダイアログを表示する:
    batch
    TortoiseProc.exe /command:merge /path:"C:\projects\my_wc" /fromurl:"http://svn.example.com/repo/branches/feature-A" /tourl:"http://svn.example.com/repo/branches/feature-B"

    (これは「2つの異なるURLをマージ」ダイアログを開きます。)

  • 特定のブランチから現在のブランチに、HEAD リビジョンまでの変更をマージし、成功したら指定したメッセージで自動コミットし、ダイアログを閉じる:
    batch
    TortoiseProc.exe /command:merge /path:"C:\projects\my_branch_wc" /url:"http://svn.example.com/repo/trunk" /revision:HEAD /logmsg:"Merged trunk changes." /closeonend:3

    注意点: /logmsg/closeonend:3 を指定しても、マージ中にコンフリクトが発生した場合など、ユーザーの介入が必要な場合はダイアログが表示されたままになります。また、マージの種類(リビジョン範囲、2つのURLなど)は、指定するパラメータ (/url, /revision のみか、/fromurl, /tourl か)によって TortoiseSVN が自動的に判断します。コマンドラインからのマージは、svn.exe merge コマンドの方が詳細なオプションを指定でき、非対話的な自動化には向いています。TortoiseProc.exe は、複雑なマージオプションを設定したマージダイアログをユーザーに提示するために使うのが有効なシナリオです。

4.9. Cleanup (クリーンアップ)

作業コピーのクリーンアップを行います。ロックの解除や、中断された操作の復旧などに使われます。

batch
TortoiseProc.exe /command:cleanup /path:"C:\working_copy\project"

  • /path:"<パス>": クリーンアップしたい作業コピーのパスを指定します。複数のパスはセミコロンで区切ります。
  • /nochecksvnprops: svn:external などのプロパティチェックを行わない場合に指定します。
  • /nocheckunversioned: バージョン管理されていないファイルやディレクトリのチェックを行わない場合に指定します。
  • /nofixactualcase: 大文字小文字の修正を行わない場合に指定します。
  • /nofixdates: 日付の修正を行わない場合に指定します。
  • /noremoveunversioned: バージョン管理されていないファイルを削除しない場合に指定します。
  • /noremoveignored: 無視リストに登録されているファイルを削除しない場合に指定します。
  • /refreshshell: シェルオーバーレイアイコンを更新しない場合に指定します。
  • /closerepos: 開いているリポジトリウィンドウを閉じない場合に指定します。
  • /external: 外部リポジトリもクリーンアップ対象に含める場合に指定します。
  • /closeonend:<0|1|2|3>: 処理終了後のダイアログ動作を指定します(Update コマンドと同じ)。

使用例:

  • 作業コピー全体を標準設定でクリーンアップし、終了時にダイアログを閉じる:
    batch
    TortoiseProc.exe /command:cleanup /path:"C:\projects\my_project" /closeonend:3
  • 特定のディレクトリをクリーンアップし、外部リポジトリも対象に含める:
    batch
    TortoiseProc.exe /command:cleanup /path:"C:\projects\my_project\moduleA" /external /closeonend:3

    クリーンアップは、updatecommit の前に実行しておくと、潜在的な問題を回避できる場合があるため、自動化スクリプトの最初に組み込むのが推奨されるケースが多いです。

4.10. Export (エクスポート)

リポジトリや作業コピーを、.svn ディレクトリを含まないクリーンな状態でエクスポートします。

batch
TortoiseProc.exe /command:export /path:"C:\working_copy\project" /output:"C:\export_destination"

または
batch
TortoiseProc.exe /command:export /url:"http://svn.example.com/repo/trunk" /output:"C:\export_destination"

  • /path:"<エクスポート元パス>": エクスポート元の作業コピーのパスを指定します。
  • /url:"<エクスポート元URL>": エクスポート元のリポジトリ URL を指定します。/path/url のどちらかを指定します。
  • /output:"<エクスポート先パス>": エクスポート先のローカルディレクトリのパスを指定します。このディレクトリは存在しない場合は作成されます。
  • /revision:<リビジョン番号>|<リビジョンキーワード>: エクスポートしたいリビジョンを指定します。/url と組み合わせて使われます。省略した場合は HEAD リビジョンになります。
  • /nonrecursive: ディレクトリを指定した場合に、そのディレクトリ直下のみをエクスポートし、サブディレクトリをエクスポートしない場合に指定します。
  • /ignoreexternals: svn:externals プロパティで定義された外部リポジトリをエクスポートしない場合に指定します。
  • /username:"<ユーザー名>": SVN 認証が必要な場合にユーザー名を指定します(Checkout コマンドと同じ注意点)。
  • /password:"<パスワード>": SVN 認証が必要な場合にパスワードを指定します(Checkout コマンドと同じ注意点)。
  • /closeonend:<0|1|2|3>: 処理終了後のダイアログ動作を指定します(Update コマンドと同じ)。

使用例:

  • 作業コピーを別のディレクトリにエクスポートする:
    batch
    TortoiseProc.exe /command:export /path:"C:\projects\my_project" /output:"C:\build\release_files" /closeonend:3
  • リポジトリの特定の URL の HEAD リビジョンをエクスポートする:
    batch
    TortoiseProc.exe /command:export /url:"http://svn.example.com/repo/tags/release-1.0" /output:"C:\temp\release_export" /closeonend:3
  • リポジトリの特定のリビジョン (r500) をエクスポートする:
    batch
    TortoiseProc.exe /command:export /url:"http://svn.example.com/repo/trunk" /revision:500 /output:"C:\temp\trunk_r500" /closeonend:3

4.11. RepoNew (ローカルリポジトリ作成)

ローカルマシン上に新しい Subversion リポジトリを作成します。

batch
TortoiseProc.exe /command:reponew /path:"C:\svn_repositories\new_repo"

  • /path:"<リポジトリ作成先パス>": 新しいリポジトリを作成するディレクトリのパスを指定します。
  • /fstype:<fsfs|bdb>: リポジトリのファイルシステムタイプを指定します。fsfs (デフォルト) または bdb を指定できます。通常は fsfs が推奨されます。

使用例:

  • 新しいローカルリポジトリを作成する:
    batch
    TortoiseProc.exe /command:reponew /path:"D:\MySVNRepo\projectA"

    (このコマンドを実行すると、「リポジトリ作成」ダイアログが表示され、ユーザーは「リポジトリを作成」ボタンをクリックする必要があります。完全に非対話的に作成したい場合は、svnadmin create コマンドを使用します。)

4.12. その他よく使うオプション

多くのコマンドで共通して利用できる便利なオプションがあります。

  • /path:"<パス1>[;<パス2>;...]": 操作対象のパスを指定します。ファイル、ディレクトリ、または複数のパスをセミコロンで区切って指定できます。多くのコマンドで必須または重要なパラメータです。
  • /noprogressui: プログレスダイアログを表示しないようにします。バックグラウンドで処理したい場合に便利ですが、エラー発生時なども通知されないため注意が必要です。
  • /notempfile: 一時ファイルを使用しないようにします。デバッグ目的などで使用されることがあります。
  • /noui: GUI を完全に抑制し、非対話的に実行しようと試みます。ただし、TortoiseProc.exe は基本的に GUI 表示を前提としているため、このオプションを指定してもユーザー入力が必要な場面では処理が停止するか、エラーになる可能性が高いです。 完全に非対話的な自動化には /noui ではなく svn.exe を使うべきです。
  • /verbosesvn / /verbosegit: SVN または Git の詳細な出力を表示します(TortoiseGit と共通のオプションです)。

5. バッチファイルやスクリプトでの活用例

TortoiseProc.exe をバッチファイル (.bat, .cmd) や PowerShell スクリプト (.ps1) から呼び出すことで、定型的な SVN 作業を自動化・効率化できます。

5.1. シンプルな更新バッチファイル

毎日作業開始前に作業コピーを更新するためのバッチファイル例です。

“`batch
@echo off
REM 作業コピーのパス
set WORKING_COPY_PATH=”C:\projects\my_project”

echo %WORKING_COPY_PATH% を更新します…

“C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe” /command:update /path:%WORKING_COPY_PATH% /closeonend:3 /noprogressui

REM エラーチェック (TortoiseProc.exe は ERRORLEVEL を信頼できない場合が多いので簡易的)
if %ERRORLEVEL% NEQ 0 (
echo 更新中に問題が発生した可能性があります。
pause
) else (
echo 更新が完了しました。
)

REM 終了
exit /b %ERRORLEVEL%
“`

  • TortoiseSVN のインストールパスは環境に合わせて修正してください。
  • /closeonend:3 で処理完了時にダイアログが自動で閉じます。
  • /noprogressui でプログレスバーのダイアログが表示されなくなります(処理が完了したかどうかわかりにくくなるので、必要に応じて外してください)。
  • ERRORLEVEL でのチェックは、TortoiseProc.exe が GUI を表示する性質上、必ずしも期待通りに機能しない場合があります。例えば、エラーが発生してもダイアログが表示されてユーザー操作を待つ場合、スクリプトはそこで停止し、ERRORLEVEL は設定されない可能性があります。

5.2. 更新してからコミットするバッチファイル

更新後、特定のメッセージでコミットする例です。ただし、前述の通り commit コマンドの自動化には注意が必要です。

“`batch
@echo off
REM 作業コピーのパス
set WORKING_COPY_PATH=”C:\projects\my_project”
set COMMIT_MESSAGE=”Daily work commit %date% %time%”

echo %WORKING_COPY_PATH% を更新します…

REM 更新 (エラー発生時以外は閉じる)
“C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe” /command:update /path:%WORKING_COPY_PATH% /closeonend:2 /noprogressui

REM ERRORLEVEL は信頼できないが、一応チェック
if %ERRORLEVEL% NEQ 0 (
echo 更新中にエラーが発生しました。コミットをスキップします。
pause
goto end
)

echo %WORKING_COPY_PATH% をコミットします…

REM コミット (メッセージ指定、自動クローズ)
REM 注意: この方法はコミットダイアログをスキップしますが、コミット対象ファイルは TortoiseSVN の内部状態に依存する可能性があります。
“C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe” /command:commit /path:%WORKING_COPY_PATH% /logmsg:%COMMIT_MESSAGE% /closeonend:3 /noprogressui /nopopup

if %ERRORLEVEL% NEQ 0 (
echo コミット中にエラーが発生した可能性があります。
pause
) else (
echo コミットが完了しました。
)

:end
exit /b %ERRORLEVEL%
“`

この例では、/logmsg を指定してコミットメッセージダイアログをスキップしています。しかし、これが確実に意図したファイルのみをコミットするかは保証されません。より堅牢な自動コミットを行いたい場合は、svn.exe commit コマンドを使用し、--depth empty--targets file1 file2 といったオプションでコミット対象を正確に指定する方が安全です。

5.3. 特定のリビジョンをエクスポートするバッチファイル

リポジトリ URL とリビジョンを指定して、クリーンなファイルをエクスポートします。

“`batch
@echo off
REM リポジトリURL
set REPO_URL=”http://svn.example.com/repo/tags/release-2.0″
REM エクスポート先ディレクトリ
set EXPORT_DIR=”C:\Builds\Release_2_0″
REM エクスポートするリビジョン (HEAD の場合は HEAD または省略)
set EXPORT_REV=”HEAD”

echo %REPO_URL% (Revision %EXPORT_REV%) を %EXPORT_DIR% にエクスポートします…

REM エクスポート先ディレクトリが既に存在する場合は削除 (任意)
if exist %EXPORT_DIR% (
echo %EXPORT_DIR% を削除します…
rmdir /s /q %EXPORT_DIR%
)

REM エクスポート実行
“C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe” /command:export /url:%REPO_URL% /output:%EXPORT_DIR% /revision:%EXPORT_REV% /closeonend:3

REM エラーチェック (簡易的)
if %ERRORLEVEL% NEQ 0 (
echo エクスポート中にエラーが発生した可能性があります。
pause
) else (
echo エクスポートが完了しました。
)

exit /b %ERRORLEVEL%
“`

このバッチファイルは、指定されたタグの最新リビジョンをエクスポートします。リリースビルドの準備などで役立ちます。

5.4. PowerShell スクリプトでの利用

PowerShell から TortoiseProc.exe を呼び出すことも可能です。引数の渡し方は基本的にバッチファイルと同じですが、パスや引用符の扱いに PowerShell の流儀が適用されます。

例:作業コピーを更新する PowerShell スクリプト

“`powershell
$TortoiseProc = “C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe”
$WorkingCopyPath = “C:\projects\my_project”

Write-Host “$WorkingCopyPath を更新します…”

& $TortoiseProc /command:update /path:$WorkingCopyPath /closeonend:3 /noprogressui

PowerShell でのエラーハンドリング

if ($LASTEXITCODE -ne 0) {
Write-Error “更新中にエラーが発生した可能性があります。”
} else {
Write-Host “更新が完了しました。”
}
``
PowerShell では
&` 演算子を使って外部コマンドを実行します。変数にパスなどを格納しておくと、より柔軟なスクリプトを作成できます。

6. TortoiseProc.exe をあえて自動化に使うシナリオ

前述の通り、完全に非対話的な自動化には svn.exe が適しています。しかし、以下のようなシナリオでは TortoiseProc.exe を利用する方が理にかなっている場合があります。

  1. ユーザーの介入を伴う半自動化:

    • コミット前に変更差分を GUI で必ず確認させたいが、その他の準備(更新、クリーンアップなど)は自動で行いたい場合。バッチファイルで更新やクリーンアップを実行した後、最後に TortoiseProc.exe /command:commit /path:... を実行してコミットダイアログを表示させる、といった使い方ができます。
    • 複雑なマージを行う際に、マージ元やオプションを設定済みのマージダイアログをユーザーに提示し、最終的なマージ実行はユーザーに任せたい場合。
    • 特定のリビジョンログをフィルタリングした状態で表示させ、ユーザーに履歴を確認してもらいたい場合。
  2. TortoiseSVN GUI 特有の機能の呼び出し:

    • TortoiseProc.exe は TortoiseSVN の GUI を呼び出すため、TortoiseSVN 独自の機能やダイアログ(例えば、リビジョンログの詳細な検索/フィルタリング機能、特定のプロパティ編集ダイアログなど)を利用したい場合に便利です。svn.exe ではこれらの GUI 機能は利用できません。
  3. 視覚的な確認が必要なタスク:

    • 自動化スクリプトのステップの間に、現在の作業コピーの状態を TortoiseSVN のアイコンオーバーレイなどで視覚的に確認させたい場合。特定のディレクトリに対して Update を実行し、その後エクスプローラーを開かせてアイコンの状態を確認させる、といったワークフローも考えられます。
  4. 特定の開発者にGUIで通知や操作を促す:

    • CI ツールなどが特定の条件下で、特定の開発者のマシン上で TortoiseSVN のダイアログを開き、何らかの操作(例: コンフリクト解決、確認コミットなど)を促すトリガーとして限定的に利用されることがあります。これはかなり特殊なケースであり、ネットワーク経由での認証や権限の問題など、実装は容易ではありません。

これらのシナリオでは、TortoiseProc.exe が GUI を表示する性質が、逆に利点となります。

7. svn.exeTortoiseProc.exe の比較と使い分けの指針

ここで改めて svn.exeTortoiseProc.exe の違いを整理し、どのような場合にどちらを使うべきか、使い分けの指針を示します。

特徴/機能 svn.exe TortoiseProc.exe
実行形式 CUI (Character User Interface) GUI (Graphical User Interface) を呼び出す
対話性 非対話実行が基本 (オプションで指定) ユーザー操作/確認を前提
自動化の容易さ 高い。完全に自動化されたバッチ/スクリプト向け 比較的低い。GUIが表示されるため、半自動化向け
CI/CD パイプライン 適している 不向き (GUI表示が必要なため)
認証情報 コマンドライン引数、環境変数、設定ファイル 基本的に GUI ダイアログで入力 (一部引数も可能だが非推奨)
出力形式 標準出力/標準エラー出力 (テキスト、XMLなど) GUI ダイアログ (結果は通常画面表示)
機能範囲 基本的な SVN 操作全般 TortoiseSVN の GUI 機能に対応する操作
視覚的な確認 なし あり (GUI ダイアログ、シェルオーバーレイ)
エラーハンドリング ERRORLEVEL で比較的正確に判断可能 ERRORLEVEL が信頼できない場合が多い

使い分けの指針:

  • 完全にバックグラウンドで、ユーザーの介入なしに SVN 操作を自動実行したい (CI/CD、定期的なバッチ処理、サーバーサイドスクリプトなど) -> svn.exe を使う
    • 例: Jenkins でビルド前に最新コードをチェックアウトする、毎日夜間にリポジトリをダンプする、リリーススクリプトでタグを作成する。
  • GUI の便利さを利用しつつ、特定の作業ステップの開始をコマンド化したい、ユーザーの介入を伴う定型作業を効率化したい (開発者のデスクトップ上での日常作業のスクリプト化など) -> TortoiseProc.exe を使う
    • 例: 作業開始時にワンコマンドで更新とクリーンアップを実行し、その後作業に取りかかる、コミット前の差分確認ダイアログをバッチで表示させる、複雑なマージダイアログを事前に設定した状態で開く。

TortoiseProc.exe は、TortoiseSVN GUI のヘビーユーザーが、マウス操作の一部をキーボード入力や簡単なスクリプトで置き換えたい場合に特に強力です。一方、真の意味での「自動化」(無人実行)を目指すのであれば、svn.exe の習得は避けて通れません。両者を適切に使い分けることが、SVN 作業全体の効率化に繋がります。

8. より高度な使い方(応用)

8.1. 複数コマンドの組み合わせ

バッチファイルやスクリプト内で、複数の TortoiseProc.exe コマンドを順に実行することで、より複雑なワークフローを構築できます。

例: クリーンアップ -> 更新 -> コミットダイアログ表示 のバッチファイル

“`batch
@echo off
set WC_PATH=”C:\projects\my_project”

echo クリーンアップを実行します…
“C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe” /command:cleanup /path:%WC_PATH% /closeonend:3 /noprogressui

echo 更新を実行します…
“C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe” /command:update /path:%WC_PATH% /closeonend:2 /noprogressui

REM 更新でエラーがなければコミットダイアログを表示
if %ERRORLEVEL% EQU 0 (
echo コミットダイアログを表示します…
“C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe” /command:commit /path:%WC_PATH%
) else (
echo 更新に失敗したためコミットはスキップします。
pause
)

exit /b
“`

この例では、更新が成功した場合(closeonend:2 の設定でエラーがなければダイアログが自動で閉じ、ERRORLEVEL が 0 になることを期待しているが、常に保証されるわけではない)、続けてコミットダイアログを表示しています。

8.2. 外部スクリプトからの呼び出し

Python やその他のプログラミング言語から TortoiseProc.exe を呼び出すことも可能です。これにより、より高度なロジックに基づいた SVN 作業の自動化が可能になります。

例: Python から作業コピーを更新

“`python
import subprocess
import os

tortoise_proc = r”C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe”
working_copy = r”C:\projects\my_project”

if not os.path.exists(tortoise_proc):
print(f”Error: TortoiseProc.exe not found at {tortoise_proc}”)
exit()

command = [
tortoise_proc,
“/command:update”,
f”/path:\”{working_copy}\””,
“/closeonend:3”,
“/noprogressui”
]

print(f”Updating working copy: {working_copy}”)

subprocess.run はコマンドの終了を待ちます

result = subprocess.run(command, shell=True, capture_output=True, text=True)

if result.returncode != 0:
print(f”Error during update (Return Code: {result.returncode})”)
print(“Stderr:\n”, result.stderr)
print(“Stdout:\n”, result.stdout) # TortoiseProc.exe は標準出力にほとんど何も出しません
else:
print(“Update completed successfully.”)

``
Python の
subprocessモジュールを使うことで、外部コマンドを柔軟に実行し、終了コードを取得できます。ただし、TortoiseProc.exe` の出力やエラーハンドリングは限定的であることに注意が必要です。

8.3. Windows タスクスケジューラとの連携

TortoiseProc.exe を呼び出すバッチファイルやスクリプトを Windows のタスクスケジューラに登録することで、特定の時刻に自動的に SVN 作業を実行させることができます。

例: 毎日深夜に特定のブランチをチェックアウトして最新の状態にする

  1. 上記「チェックアウト」の例で示した export コマンドの代わりに checkout コマンドを使うバッチファイルを作成します。必要に応じて /username/password を指定しますが、セキュリティリスクを理解して使用してください(または、タスクスケジューラをログインユーザーで実行し、SVN の認証情報をローカルにキャッシュさせるなど別の手段を検討してください)。
  2. タスクスケジューラを開きます。
  3. 新しいタスクを作成します。
  4. 「全般」タブでタスク名を入力し、「ユーザーがログオンしているときのみ実行する」ではなく「ユーザーがログオンしているかどうかに関わらず実行する」を選択します。(ただし、この設定で TortoiseProc.exe が GUI を表示せずに期待通りに動作するかは環境によります。多くの場合、ユーザーがログオンしているセッションで実行する必要があります。もし GUI が表示されても問題ない環境であれば、ユーザーがログオンしているときのみ実行でも構いません。)
  5. 「トリガー」タブで、実行したいスケジュールを設定します(例: 毎日深夜 3 時)。
  6. 「操作」タブで、「プログラムの開始」を選択し、「プログラム/スクリプト」に作成したバッチファイルまたはスクリプトのパスを指定します。
  7. 必要に応じて他の設定を行い、タスクを保存します。

この方法は、定期的なソースコード取得などには有効ですが、認証情報の取り扱いや GUI 表示の問題により、常に安定して動作するとは限りません。繰り返しになりますが、無人での定期実行には svn.exe がより適しています。

9. トラブルシューティング

TortoiseProc.exe を使用する際に遭遇しうる一般的な問題とその対処法です。

  • 'TortoiseProc.exe' は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。

    • 原因: TortoiseProc.exe へのパスが正しく指定されていないか、システム環境変数 PATH に TortoiseSVN の bin ディレクトリが追加されていません。
    • 対処法:
      • コマンドプロンプトで TortoiseProc.exe をフルパスで指定して実行してみてください(例: "C:\Program Files\TortoiseSVN\bin\TortoiseProc.exe")。
      • TortoiseSVN の bin ディレクトリ (例: C:\Program Files\TortoiseSVN\bin) をシステム環境変数 PATH に追加してください。追加後は、新しいコマンドプロンプトを開き直す必要があります。
  • TortoiseSVN のダイアログが表示されたまま閉じない

    • 原因: コマンドの処理中にエラーが発生したか、ユーザーの入力や確認が必要な状況になったにも関わらず、/closeonend:3 を指定していなかった、または /closeonend:3 を指定したがエラーやコンフリクトが発生したため強制的に閉じられなかった。
    • 対処法:
      • 処理完了時にダイアログを自動で閉じたい場合は、/closeonend:3 オプションを必ず指定してください。
      • /closeonend:3 を指定してもダイアログが閉まらない場合は、エラーやコンフリクトが発生している可能性が高いです。表示されたダイアログの内容を確認し、手動で対処する必要があります。スクリプトでの実行中にこれが頻繁に起こる場合は、その作業は TortoiseProc.exe による完全自動化には向いていない、または svn.exe の使用を検討すべきかもしれません。
  • 認証情報の入力ダイアログが表示されて処理が停止する

    • 原因: SVN リポジトリへのアクセスに認証が必要ですが、ユーザー名やパスワードがコマンドライン引数で渡されていないか、渡された情報が誤っている、または認証情報をローカルにキャッシュできていない。
    • 対処法:
      • もしコマンドラインでユーザー名とパスワードを渡す必要がある場合は、/username/password オプションを使用してください(ただしセキュリティリスクに注意)。
      • 最も確実なのは、一度手動で TortoiseSVN GUI を使って対象リポジトリにアクセスし、認証情報の保存を選択してローカルにキャッシュを作成しておくことです。次回以降、同じユーザーアカウントでスクリプトを実行すれば、キャッシュされた認証情報が利用される可能性があります。
      • 非対話的な自動化で認証情報が必要な場合は、svn.exe を使用し、--username, --password, --no-auth-cache, --non-interactive などのオプションや、認証情報を設定ファイルに記述する方法を検討してください。
  • 特定のファイルがコミットされない、意図しないファイルがコミットされる

    • 原因: commit コマンドで /path にディレクトリを指定した場合、コミット対象のファイルは TortoiseSVN の内部状態(前回のコミットダイアログでチェックされていたファイルなど)に依存する可能性があり、コマンドライン引数だけで正確に制御するのが難しい。
    • 対処法:
      • 確実に特定のファイルのみをコミットしたい場合は、/path オプションでファイルパスを個別に指定してください。
      • より堅牢な自動コミットには、svn.exe commit コマンドを使用し、--targets file1 file2 ... のようにコミット対象ファイルを明示的に指定することを推奨します。
  • /noui オプションを指定しても GUI が表示される、またはエラーになる

    • 原因: TortoiseProc.exe は本質的に GUI ツールであり、多くのコマンドは内部的に GUI を表示してユーザー操作を待つように設計されています。/noui はそれを抑制しようとしますが、ユーザー入力が必須な状況(認証、コンフリクト、コミットメッセージ入力など)では完全に非対話的に実行することは困難です。
    • 対処法: /noui に過度な期待をせず、TortoiseProc.exe は半自動化ツールであると割り切るか、完全に自動化したいタスクには svn.exe を使用してください。

10. まとめ

TortoiseSVN は Windows 環境で SVN を扱う上で非常に優れた GUI ツールですが、そのコマンドラインインターフェースである TortoiseProc.exe を活用することで、さらに作業を効率化・自動化する道が開けます。

TortoiseProc.exe は、Subversion 本家のコマンドラインツール svn.exe とは異なり、TortoiseSVN の GUI ダイアログをコマンドラインから呼び出すためのツールです。この特性から、完全に無人で実行するような厳密な自動化タスクには svn.exe が適していますが、ユーザーの介入を伴う半自動化定型作業のトリガーTortoiseSVN 独自の GUI 機能の呼び出しといったシナリオにおいては、TortoiseProc.exe が非常に有効なツールとなります。

本記事では、TortoiseProc.exe の基本構文、update, commit, log, diff, checkout, switch, merge, cleanup, export, reponew といった主要コマンドの詳細なパラメータと使用例、そしてバッチファイルや PowerShell スクリプトへの組み込み方について解説しました。

TortoiseProc.exe を理解し、日々の SVN 作業の中で繰り返し行っている操作をコマンド化することで、マウスでの手作業を減らし、開発ワークフローをスムーズにすることができます。一方で、完全に非対話的な自動化や CI/CD パイプラインへの組み込みを検討する場合は、svn.exe の利用も視野に入れ、両者の特性を理解した上で適切に使い分けることが重要です。

この知識を活用し、TortoiseSVN コマンドラインによる効率化・自動化をぜひ実践してみてください。

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール