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」ファイルが生成されて、中に差分のファイルがまとまっています。


resizeイベントを使用する場合は、iOS Safariでの挙動に注意
アイコンフォントをPCにインストールしている場合は、コーディング後の確認に注意
pointer-eventsプロパティでクリックイベントを無効化にする|気になるCSSプロパティ
コーディングで「スペース」と「タブ」のどちらを使えばいいのか?
CSSやJavaScriptでスクロールバーの横幅を取得する方法
CodeAnywhereでターミナルに触る練習をする
超軽量なコードエディタ 「Zed」をサブエディタとして活用する
Facebookでシェアした記事の画像反映ができていない時の修正方法
Vue.jsを使う人が最低限導入しておきたいVisual Studio Codeの拡張機能
iTerm2で「Use System Window Restoration Setting」を設定しているとアラートが表示されて機能しない
Google Chromeのサイト内検索(カスタム検索)機能を別のプロファイルに移行する方法
iPadで入力モードを切り替えずに数字や記号をすばやく入力する方法
iPhoneやiPadでYouTubeの再生速度を3倍速や4倍速にする方法
Keynoteで有効にしているはずのフォントが表示されない現象
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
無料版でも高機能なランチャーアプリ「Raycast」の基本機能と環境設定
OnyXでターミナルを使わずにmacOSの詳細設定を行う
軽量で高速なターミナルエミュレーター「Ghostty」の設定方法
Eagleで実現するクリエイティブ素材の簡単管理
かゆいところに手が届く「Supercharge」でMac環境を便利にカスタマイズする
Bartender 6で追加されたWidgets機能で自作メニューバーアイテムを簡単に作成する
Googleカレンダーを便利に活用するための小技集(祝日だけを表示・月末の繰り返しイベントを追加)
Obsidianを使った「自己流PKM」で行う知識トレーニング
テキストエディタ・ノートアプリ関連のショートカットキーをKeyboard Maestroで統一する