SourceTreeのカスタムアクションを使って差分ファイルだけをまとめる方法

データの納品後に修正依頼が来て、対応後は「修正ファイルのみをアップしたいので修正したファイルだけまとめてください」と言われるときがあります。
Gitで管理しておけば差分は分かりますが、それを見ながら手動で1つ1つファイルを抽出するのは面倒です。
そこで、カスタムアクションを使って差分ファイルだけを簡単にまとめるようにしました。
シェルスクリプトの準備
下記のシェルスクリプトをコピーして.sh拡張子で保存します。
自分の場合は「diff_export_zip.sh」という名前で保存しました。
#!/bin/sh
if [ "$2" = "" ]; then
git archive --format=zip --prefix=diff_archive/ HEAD `git diff --name-only HEAD $1` -o diff_list.zip
else
git archive --format=zip --prefix=diff_archive/ $1 `git diff --name-only $1 $2` -o diff_list.zip
fiやっていることは、最初に$2(コミットID、tag, branch)が存在しないかどうかで条件分岐をしています。
そしてそれぞれの場合にgit archiveコマンドを使ってGit管理下のファイルをアーカイブ化しています。
オプションの「–output=diff_list.zip」部分が出力するファイル名で、このままだと「diff_list.zip」という名前で出力されます。
実行権限の追加
ターミナルを開いて、下記コマンドで実行権限を追加する必要があります。
$ chmod +x diff_export_zip.sh実行権限をしていないと、あとでカスタムアクションを実行したときに「launch path not accessible」エラーが出てきて実行されないので注意が必要です。
SourceTreeの設定
.shファイルを保存したら、そのファイルをカスタムアクションに登録します。
[カスタムアクション]タブが選択できない場合
SourceTreeの環境設定の[カスタムアクション(Cutsom Actions)]タブを選択します。
ただ、日本語のSourceTreeを使っている場合は[カスタムアクション]タブがグレーになっていて選択できなくなっているみたいです。英語に切り替えると選択できるようになります。
カスタムアクションの登録
[Custom Actions]タブを開いたら、左下の「Add」ボタンをクリックします。
![[Custom Actions]タブ](https://webrandum.net/mskz/wp-content/uploads/2023/01/image_1-5.png)
あとは必要な情報を入力します。

| 項目 | 内容 | 備考 |
|---|---|---|
| Menu Caption | 表示されるラベル名 | |
| Click to record shortcut | ショートカットキーの設定 | クリックして設定したいショートカットキーを押して登録する |
| Open in Separate Window | 別のウインドウで開く | |
| Show Full Output | 出力結果をフルで表示する | |
| Script to run | 保存したシェルスクリプトファイルを指定する | |
| Parameters | 引数を指定する | 今回は「$SHA」を指定する |
カスタムアクションの使い方
今回の場合はどこからどこまでの差分が欲しいのか指定してあげる必要があるので、下記手順で2つコミットを選択します。
- 開始位置となるコミットをクリック
- commandを押しながら差分となるコミットをクリック
あとは右クリックメニューから[カスタムアクション]→[差分ファイルをZip出力(Menu Captionで設定した名前)]を選択します。
これで「diff_list.zip」ファイルが生成されて、中に差分のファイルがまとまっています。


iOS Safariで指定したフォントサイズにならない場合の対処法
Dart Sassを使う上で1番基本的なネストやアンパサンドの書き方|Dart Sass入門
CSSでclassがついていないタグにだけスタイルを当てる方法
W3 Total Cacheをレスポンシブデザインのテーマで使用する時の注意ポイント!!【WordPress】
様々な作業を自動化するgulpの基礎と導入方法
ソースコードをハイライトする軽量ライブラリ「Highlight.js」の導入方法と使い方
WordPressで「予約投稿の失敗」となってしまう場合の対処方法
Visual Studio CodeでToDoコメントを一覧で表示する拡張機能「Todo Tree」
Nuxt.jsでページを作成・追加する方法|Nuxt.jsの基本
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
Googleカレンダーを便利に活用するための小技集(祝日だけを表示・月末の繰り返しイベントを追加)
Obsidianを使った「自己流PKM」で行う知識トレーニング
テキストエディタ・ノートアプリ関連のショートカットキーをKeyboard Maestroで統一する
Path Finderを使ってキーボードだけでファイル操作する方法(応用編)
macOSのコマンドパレット比較!SpotlightとAlfred、Raycastどれを使えばいい?
1つのノートアプリにすべて集約するのをやめた理由|2025年時点のノートアプリの使い分け
Notionログイン時の「マジックリンク」「ログインコード」をやめて普通のパスワードを使う
AlfredでNotion内の検索ができるようになるワークフロー「Notion Search」
Gitで1行しか変更していないはずのに全行変更した判定になってしまう