5丁目通信(仮称)

とある5丁目で活動する還暦を過ぎたWebプログラマーの覚え書きです。それとかかってくる迷惑電話や、家業のアパート経営について。

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


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

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

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

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

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

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

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

著:湊川あい, 著:DQNEO
¥2,208 (2024/10/10 08:54時点 | Amazon調べ)
著:リック・ウマリ, 翻訳:吉川邦夫
¥3,247 (2024/09/27 11:17時点 | Amazon調べ)

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倍楽になったよ。って、書いたら既に誰かが作っているのだろうな。

追記(2020年9月25日)

以上のことをしなくても、Source TreeにはGit Flowをサポートする機能があるので、案件ごとにfeatureブランチを作って、完了したときにdevelopブランチにマージすれば(この一連の操作はSource Treeでサポートしてくれる)、コミットしたファイル一覧がわかる。現在は、更新したファイルを報告することはなくなったけど、デプロイとかやっていないので、いまだに手作業でFTPでファイルをアップしている。どのファイルが更新されたがわかるので(FTPクライアントの自動更新機能を使えよという声が聞こえそうだけど)、これは便利な機能である。