Sourcetreeで差分ファイルをzip出力

作成日:2019-06-28, 更新日:2020-02-04

基本

「SourcetreeでGitファイル差分をZip化するカスタムアクション(http://cresson.ivory.ne.jp/kuruton/git_001)」をコピペ(2020-02-04時点で記事が消えてた・・・)

▼流れ
・バッチファイルを用意
・Sourcetreeの「メニュー:ツール」の「オプション」の「タブ:カスタム操作」でバッチファイルを指定
 実行するスクリプトは作ったバッチファイルへのPATH
 パラメータは「$SHA」
・Sourcetreeのヒストリーからコミットを一つ(or 2つ)選択して、右クリック→「カスタム操作」の使いたいヤツをクリック
→差分ファイルがzipで出力される
※追加・修正ファイルは分かるけど、削除したファイルは当然のコトながら出力されない。

バッチファイル

「git」のPATHを通しておかないとエラーになる。
※バッチファイルの「git」のトコをフルPATHにしてても良さげ

▼win

@echo off
if "%2" EQU "" (
	set PARAM1=HEAD
	set PARAM2=%1
) else (
	set PARAM1=%1
	set PARAM2=%2
)

setlocal enabledelayedexpansion
set RET_DIR=
for /F "usebackq" %%i in (`git diff --name-only %PARAM2% %PARAM1% --diff-filter=ACMR`) do (
	set RET_DIR=!RET_DIR! "%%i"
)

git archive --format=zip --prefix=archive/ %PARAM1% %RET_DIR% -o ../archive.zip

最後の行の「../archive.zip」が出力先になる。

▼mac(未調査)

#!/bin/sh
if [ "$2" = "" ]; then
	git archive --format=zip --prefix=archive/ HEAD `git diff --name-only $1 HEAD --diff-filter=ACMR` -o ../archive.zip
else
	git archive --format=zip --prefix=archive/ $1 `git diff --name-only $2 $1 --diff-filter=ACMR`  -o ../archive.zip
fi

「git」のPATH

▼Sourcetreeで「メニュー:ツール→オプション」で「タブ:Git」にある「Gitバージョン」ってトコに記載あり

C:\Users\〇〇〇\AppData\Local\Atlassian\SourceTree\git_local\cmd.exe

▼PATHを通すとき

C:\Users\〇〇〇\AppData\Local\Atlassian\SourceTree\git_local

PATHを通したらCMDとかで「git -h」とかで確認してエラーが出なければOK
※PC再起動が必要かもしれない

差分の取得

▼こういうときの問題
・本番環境にはGitが無いので修正ファイルを手動でupしないとダメなとき

やりたいコト、問題

1.フィーチャーブランチ作成
2.ファイルを修正→コミット→テスト
3.ファイルを修正→コミット→テスト
4.ファイルを修正→コミット→テスト

→本番反映するために「1」と「4」の差分が欲しい

「2」~「4」はヒストリーを見ればわかるが、「1」がヒストリーのドコにあるのかが分からない

対策

「このコミットを打消し...」ってヤツをやれば「Revert 〇〇〇」としてヒストリーに残るので、疑似的にフィーチャーブランチ作成した最初が分かる。

▼手順

1.フィーチャーブランチ作成
2.適当にファイルを修正→コミット
3.「このコミットを打消し...」で「Revert 〇〇〇」としてヒストリーに残す(「1」と同じ状態になる)
4.ファイルを修正→コミット→テスト
5.ファイルを修正→コミット→テスト
6.ファイルを修正→コミット→テスト

→ヒストリーから「3」と「6」を指定して差分出力すればOK

他問題

上記方法を模索する前にファイルを修正していた。

1.フィーチャーブランチ作成
2.ファイルを修正

というトコまで来ていた。

コミットすると「1」が消える
コミットしてRevertすると「2」が消える→その後、「2」の修正を復活させるっていうのは面倒・・・

▼とりあえず下記のような感じで対応

1.フィーチャーブランチ作成
2.ファイルを修正
3.「2」をスタッシュで一時退避させておく
4.適当にファイルを修正→コミット
5.「このコミットを打消し...」で「Revert 〇〇〇」としてヒストリーに残す(「1」と同じ状態になる)
6.「3」を復活→コミット

→ヒストリーには「Revert 〇〇〇」の後に「6」のコミットが記載される

bitbucketで確認

bitbucketのコミットのトコに変更されたファイル一覧アリ
・A - 追加されたファイル
・M - 変更されたファイル
・D - 削除されたファイル

bitbucketでもダウンロードが出来るそうだけど・・・タグがよく分からず挫折中。