差分ファイルの作成は結構面倒なのでSourceTreeで作りたい
いらないファイルを消し、必要なファイルだけを用意したフォルダ構成を作成するのは結構面倒くさい。
前に作った差分ファイルのフォルダ構成を流用して、などとものぐさをするとミスして痛い目をみることもある。(最近やってしまった)
せっかくファイル管理でミスが起きないようにgitで武装したのに、納品ファイルにミスが起きるようでは意味がない。
この辺を自動化できないだろうか。。と思って探したら色々ヒットした。
そのままコピペでうまく、、いかない
この辺が最新記事だったので参考にしてみたが、うまくいかない。
これらの記事が悪いのではなく私の環境が悪いのである。
ふつうの人はこれでうまくいくのです。
ICS MEDIA - SourceTreeの使い方 | コミット間の差分ファイルの抽出 (カスタム操作を使う方法)
Crouton - sourcetreeでgitファイル差分をzip化するカスタムアクション
Jiro Laboratory - SourceTree(Git)から差分ファイルを抽出してzipに圧縮
Windowsの場合の記述も書いてくれてるのに、なぜうちだとうまくいかんのか。
なぜうまくいかなかったか
上記を参考にして実行、赤いエラー。
もしくは、正常に終わったように見えて何もファイルが作られない。
主に以下の原因でした。
gitにパスが通っていない。
パスを通すかgit.exeの場所をフルパスで記述してやる必要があった。
forしてる部分
for /F "usebackq" %%i in (`git diff --name-only %PARAM1% %PARAM2%`) do (
↓
for /F "usebackq" %%i in (`"C:\Users\myusername\AppData\Local\Atlassian\SourceTree\git_local\bin\git.exe" diff --name-only %PARAM2% %PARAM1% --diff-filter=ACMR`) do (
--diff-filter=ACMR
についてはこちらの記事でQiita - gitでブランチ間の差分ファイルを抽出
zip作ってる部分
git archive --format=zip --prefix=archive/ %PARAM1% %RET_DIR% -o archive.zip
↓
"C:\Users\myusername\AppData\Local\Atlassian\SourceTree\git_local\bin\git.exe" archive --format=zip %PARAM1% %RET_DIR% -o sabun.zip
エラーのログ出力が文字化けしたりする
メモ帳でバッチを直したせいか。BOMなしUTF8で保存したら大丈夫に。
ググルさんに当てずっぽうで聞きまくる前に
ちゃんとエラーメッセージを読めばよかった。
恥ずかしいくらいのミス微修正で動いたので、当方のバッチファイルの記述は書く意味がない。
でもちゃんと動いてます。転載元記事の方々、ありがとうございました。
日本語フォルダを含むと失敗する
2018/12/26追記
どうやらマルチバイト文字含むパスだと失敗するようなので追記。
[小ネタ][git] 日本語ファイルの文字化けを回避する の記事をバッチに適用して解決。
せっかくなので使ってるバッチ全体を記載してみる。
日付.zipと日本語パス対応を入れてます。
@echo off
if "%2" EQU "" (
set PARAM1=HEAD
set PARAM2=%1
) else (
set PARAM1=%1
set PARAM2=%2
)
"C:\Users\xxxxx\AppData\Local\Atlassian\SourceTree\git_local\bin\git.exe" config --global core.quotepath false
chcp 65001
setlocal enabledelayedexpansion
set YYYYMMDD=%DATE:/=%
set RET_DIR=
for /F "usebackq" %%i in (`"C:\Users\xxxxx\AppData\Local\Atlassian\SourceTree\git_local\bin\git.exe" diff --name-only %PARAM2% %PARAM1% --diff-filter=ACMR`) do (
set RET_DIR=!RET_DIR! "%%i"
)
"C:\Users\xxxxxx\AppData\Local\Atlassian\SourceTree\git_local\bin\git.exe" archive --format=zip %PARAM1% %RET_DIR% -o sabun_%YYYYMMDD%.zip