SourceTreeでコミット間の差分ファイルを抽出しよう (カスタム操作を使う方法)
こんにちは。ICS野原です。
今回はGitクライアントソフトのSourceTreeからカスタム操作という機能を利用して「コミットの差分ファイルをzipファイルとして書き出す」ことを行います。この処理は納品で前回のリリースとの差分のファイルが必要なときに使用すると便利です。
デモ
カスタム操作の実行
カスタム操作としてバッチ・スクリプト・exeを登録すると、上図のようにメニューから実行できるようになります
Gitをインストールする
※Gitを既にインストールされている方はこの作業は不要です。SourceTreeの内蔵Gitを使用しているかたはgitコマンドが環境設定に登録されておらず、これから紹介するバッチが実行できない可能性があります。
インストールされているかチェックするためには、Windowsなら「コマンドプロンプト」、Macなら「ターミナル」上で下記コマンドを実行して確認します。
git --version
「git version 〇〇」と表示されたら問題ありません。もし「’git’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」等が表示されたら、http://git-scm.com/ などからインストールすれば設定されるかと思います。
バッチファイルの作成
適当なディレクトリに下記を記述したファイルを用意します。WindowsとMacだと同じバッチファイルで動くことが出来なかったので、別々で作成しています。
- Windows用
export_diff_zip.bat
if "%2" EQU "" ( set PARAM1=HEAD set PARAM2=%1 ) else ( set PARAM1=%1 set PARAM2=%2 ) setlocal enabledelayedexpansion set RET_DIR= for /F "usebackq" %%i in (`git diff --name-only %PARAM1% %PARAM2%`) do ( set RET_DIR=!RET_DIR! "%%i" ) git archive --format=zip --prefix=archive/ %PARAM1% %RET_DIR% -o archive.zip
- Mac用
export_diff_zip.sh
#!/bin/sh if [ "$2" = "" ]; then git archive --format=zip --prefix=archive/ HEAD `git diff --name-only HEAD $1` -o archive.zip else git archive --format=zip --prefix=archive/ $1 `git diff --name-only $1 $2` -o archive.zip fi
Macの場合ターミナルを開いて、作成したシェルスクリプトに実行権限を追加する必要があります。実行権限の付加が足りないと、「launch path not accessible」とエラーが発生します。
chmod +x export_diff_zip.sh
- バッチの内容について
※バッチの内容について簡単に説明すると 「git diff –name-only commitA commitB」でcommitAとcommitBのコミットで差分のあったファイルのリストを取得し、「git archive –format=zip –prefix=archive/ commitA commiAとcommitBの差分ファイル -o archive.zip」 で commitA時点のcommitAとcomitBの差分ファイルをarchive.zipで書きだしています。引数が1つの場合はHEADと選択したコミットとの差分になります。
バッチファイルを登録する
オプションウィンドウ
先ほど作成したバッチファイルをカスタム操作として登録します。
- Windowsの場合
メニューから「ツール」→「オプション」→「カスタム操作」タブ→「追加」ボタンをクリック - Macの場合
メニューから「SourceTree」→「環境設定」→「カスタムアクション」タブ→「追加」ボタンをクリック
カスタム操作を編集ウィンドウ
- 「メニュー表示名」…メニューに表示したい名前を設定します。今回は「指定された差分をzipで書き出す」と指定します。
- 「実行するスクリプト」…実行するスクリプトファイルのパスを指定します。「1.バッチファイルの作成」で用意したバッチファイルを指定します。
- 「パラメータ」…実行するスクリプトに送る引数を決めます。今回は「$SHA」のみを使用するので「$SHA」を記入します。
上記3箇所の設定を記入したら、「OK」ボタンを押してカスタム操作の編集ウィンドウを閉じ、オプションウィンドウも「OK」ボタンを押して閉じます。
※スクリーンショットはWindows版(※2015/1/9時点最新の SourceTree 1.6.12)です。
カスタム操作を実行する
- 一つコミットを左クリックで選択する
- Ctrl( MacはCommand )キーを押しながら左クリックでもう1箇所(計2箇所)コミットを選択する
- 2箇所コミットを選択したまま右クリックをする
- 出てくるメニュー一番下の「カスタム操作」から「指定された差分をzipで書き出す」を選ぶ
すると、archive.zipというファイルがリポジトリのルートディレクトリに配置されます。
おわりに
いかがでしたでしょうか? カスタム操作を登録しておくとGUI上で簡単に差分zipファイルを作成できるようになったかと思います。ターミナル操作が不安な人には特におすすめの機能なので知らない人がいたら是非ご紹介ください。また、複雑なコマンドを覚えておきたくない時にはオリジナルなカスタム操作を作ってみてはいかがでしょうか。私は今回紹介したカスタム操作以外に今日のコミットログを表示する「日報」の表示などを登録しています。