既に9年前のエントリーになってしまっていたこれ… tohokuaiki.hateblo.jp
SourceTreeからカスタムアクションで使いたいなと思い、WindowsのBatファイル化できないかと思った。あ、PowerShellの場合は.ps1だっけ? SourceTreeでコミット間の差分ファイル一覧をテキストファイルに出力する方法 - Qiita
スクリプトの作成
ところが、SourceTreeには自前でbashが使えるので結局Shellファイルにした。 リポジトリのルートから
/usr/bin/bash get_gitdiff.sh <from-commit-id> <to-commit-id>
という感じで実行するイメージ。
get_gitdiff.shをこんな感じで作る。
ARCHIVE_INFO_FILE=archive_info.txt DELETE_FILES_INFO=deleted_files.txt T_TIME=`date "+%Y%m%d_%H%M%S"` T_DAY=`date "+%Y%m%d"` # $1に新しい方、$2に古い方のハッシュ if [ $# -ne 2 ]; then echo "引数が不正です。コミットは2つ指定してください。" >&2 exit 1 fi if [ $1 = "-1" ]; then echo "未コミットを指定しないでください。" >&2 exit 1 fi # コミット情報の表示 echo "指定したコミット情報" > $ARCHIVE_INFO_FILE echo "From: [古いコミット]" >> $ARCHIVE_INFO_FILE git log --format="%cd - %cn<%ce> %s" -n 1 $2 >> $ARCHIVE_INFO_FILE echo "Until: [新しいコミット]" >> $ARCHIVE_INFO_FILE git log --format="%cd - %cn<%ce> %s" -n 1 $1 >> $ARCHIVE_INFO_FILE # 削除したファイルの提示 echo "[削除したファイル]" > $DELETE_FILES_INFO git diff --diff-filter=D --name-only $2 $1 >> $DELETE_FILES_INFO # 差分抽出 git archive --prefix=$T_DAY/ $1 `git diff --diff-filter=d --name-only $2 $1` -o archive_$T_TIME.tar tar -rf archive_$T_TIME.tar $DELETE_FILES_INFO $ARCHIVE_INFO_FILE gzip archive_$T_TIME.tar rm $DELETE_FILES_INFO $ARCHIVE_INFO_FILE exit 0
後で見た時に、どのコミット間の情報かというのをarchive_info.txtに残し、削除したファイルはdeleted_files.txtにまとめて手動で削除してもらう。
これをリポジトリルートにおいておく。
SourceTreeのカスタムアクションに追加
ツール>オプション>カスタム操作
と選択して、「追加」する。
実行するスクリプトは、インストールしたSourceTreeの配下にあるbash
私は自分のユーザーディレクトリに入れたので、C:\Users\xxxx\AppData\Local\Atlassian\SourceTree\git_local\bin\bash.exe だった。
パラメータはこんな感じ
$REPO/get_gitdiff.sh $SHA
実行
Historyで2つのコミットを選択して右クリックからカスタムアクションで実行。