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




EJSのincludeで別ファイルを読み込むときの画像パスを指定する方法
JavaScriptのテンプレートリテラル内で条件分岐を行う方法
Dart Sassでファイルを分割して管理する方法|Dart Sass入門
スライドを簡単に実装できるJavaScriptライブラリ「Swiper」
ダミーとして使うURLは適当に入力せず、決まったものを使うようにしよう
思考したり情報整理したい時はMarkdown記法で文章を書き出そう!!Webデザイナーの情報整理術
サイトを運営する時必ず登録しておきたいGoogle Search Console(サーチコンソール)の登録方法
Visual Studio Codeで連番を入力する拡張機能「vscode-input-sequence」
「Dart Sass」「LibSass」「Ruby Sass」などSassの種類や記法に関するまとめ
MacのKeynoteにハイライトされた状態でコードを貼り付ける方法
AirPodsで片耳を外しても再生が止まらないようにする方法
iTerm2でマウスやトラックパッドの操作を設定できる環境設定の「Pointer」タブ
DeepLで「インターネット接続に問題があります」と表示されて翻訳できないときに確認すること
Ulyssesの「第2のエディタ」表示を使って2つのシートを横並びに表示する
macOSの効率化に関するDiscordコミュニティ「CMD-F」を立ち上げました
1Passwordの開発者向け機能(SSH Agent / Environments / 1Password CLI / Developer Watchtower)
Default Folder Xで保存ダイアログ内のファイルリストにフォーカスする方法
Obsidianで整理した知識をAnkiで定着させる方法
Figma × Keyboard Maestroでどこまで効率化できる?
マウス操作の完成度が高いウインドウリサイズアプリ「Magnet」
Macで複数ディスプレイを使っている場合に便利な設定集
AppCleanerでMacアプリを関連ファイルごと完全に削除する
操作に没頭できる!Firefox版 Arcのようなブラウザ「Zen Browser」
chezmoi(シェモア)で始めるdotfiles管理