SourceTreeのカスタム操作でコミットしたファイルリストを取り出す

今やっているプロジェクトでは、本番サーバーにアップするときに、どのファイルをアップするかを報告している。理由は、共同作業しているのでお互いにファイルの上書きをしないようにするため。だって、自分以外はgitみたいなバージョン管理システムを使っていないという大きな理由。

どのファイルを修正したかなんて、手作業で拾っていったらとても大変。考えただけでもゾッとする。自分だけファイルはgitを使って乗り切っている。

他の人たちもgitを使ってもらえばいいじゃない、と思うけど、長年開発してきたプロジェクトに最近ポッと入ったので、皆さんにgitを使ってよ、なんて言えないし、第一バージョン管理って何かしら、といったところなので、仕方ないから何とか自分だけ楽をしようと考える。

今までは、コミットしたファイルの一覧を出すのにこんな感じでコマンドを打っていた。

git diff --stat --name-only commit1 commit2

16進のコミットIDを拾って打ち込むのはとても面倒。もっと楽をしようと考えた。

今使っているgitのクライアントはWindowsのSourceTree。このSourceTreeの機能にカスタム操作なる機能があることを初めて知った。選択したコミットのIDを取得してバッチファイルに流せるのだ。

SourceTreeのカスタム操作でGoogleさんに聞くと、SourceTreeでコミット間の差分ファイルを抽出しよう (カスタム操作を使う方法)」、なんて差分のファイルをアーカイブしてZIPファイルにするサンプルばかり出てくる。みなさん、同じバッチファイルのソースを載せているけど、さてどれがオリジナルなんでしょうか?

今回書いたのは、こんな感じのバッチファイル。

@echo off

if "%2" EQU "" (
set PARAM1=%1
set PARAM2=%1~1
) else (
set PARAM1=%1
for %%a in ( %* ) do set PARAM2=%%a~1
)

rem echo %PARAM1%
rem echo %PARAM2%

git --no-pager diff --stat --name-only %PARAM1% %PARAM2%

最初のパラメータのチェックだけ、前述のサンプルから使わせてもらった。SourceTreeのカスタム操作では、選択されたコミットはすべてパラメータで取ってくるので、最初と最後のパラメータが必要なので、取得する処理を書いている。でも、何十年ぶりにDOSのバッチファイルなんて書いたのだろう。

これはWindowsだけしか動かないから、Macの場合は同じようなシェルを書く必要がある。結局はパラメータの処理だけだから簡単かも。

これをgit-diff-stat.bat とか名前を付けて保存する。後は、SourceTreeのカスタム操作の設定。こちらはこんな感じで設定してしまう。

git-diff

使い方はSourceTreeでコミット一覧からコミットを選択して、右クリックからカスタム操作を選びだけ。うまく行けばコミットされたファイルがリストになって出てくるはず。

これで16進の8桁の数字を入れなくて60倍楽になったよ。って、書いたら既に誰かが作っているのだろうな。