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


HTMLのpattern属性を使ってフォームのバリデーションチェックを行う方法
WordPressのカスタムメニューでは、内部リンクに対してカスタムリンクは使わない!
Visual Studio Codeの設定を複数の端末間で同期する「Settings Sync」機能の使い方
WordPressで作成した記事をSlackでシェアしたときに、抜粋文が長く表示される場合の対処法
iOS Safariで指定したフォントサイズにならない場合の対処法
Emmetで複数のタグを一括展開して、コーディングスピードをさらに上げる方法
横幅が広がったときの挙動が変わる!CSS Gridの「auto-fill」と「auto-fit」の違い
Vue Routerでページ遷移後にトーストを表示させる方法
WordPressのメディアライブラリで画像を追加するときに表示される「HTTP エラー」の解消方法
Local by Flywheelのページ遷移を軽くする設定
AirPodsで片耳を外しても再生が止まらないようにする方法
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
CSS Nite in Kobe, vol.43「ウェブページを高速化してユーザーに価値を届けたい制作者のためのセミナー&ワークショップ」に参加してきました
CSS Nite in Kobe, vol.51「すべての人がカメラを持つ時代の SNS映え・ウェブ映えする写真撮影テクニック と 写真撮影の基礎」に参加してきました
「EWWW Image Optimizer」を使ってWordPressをWebPに対応する方法
サイト上のSVG画像を簡単に保存できるChrome拡張機能「svg-grabber」
iOS Safariの機能拡張アプリ「Svadilfari」を使って、ウェブ閲覧にジェスチャーを追加する
ブログをリニューアルして、ダークモードに対応しました(2020年版)
iTerm2でさらに細かい機能の設定ができる環境設定の「Advanced」タブ
売れるウェブサイトは戦略を映している【CSS Nite in Kobe】
新しいMacBook Proを購入して移行するときにやること|Macの細かい部分設定編