Windows であったTortoiseSVN のような、指定したコミットのファイルを抜き出したい。SourceTreeで。
概要
所謂checkout-index
を使用するカスタムアクション。
コミット当時のファイルを抜き出すのではなく、現在のindexの状態からエクスポートするので、完全にTortoiseSVNと同様の操作というわけではありません。
動作保証は特に無しでお願いします。
カスタムアクションを定義しよう
ネットでよく見かけるカスタムアクション。
ネットで見つかるカスタムアクションのスクリプトは1つか2つのコミットを指定して差分ファイルを持ってくる系。
ここで掲載するスクリプトは、Cmd + click
で複数選択可能(飛び飛びでもok)!
カスタムアクションのパラメータは $SHA
で。
設定方法はこちらを参照してください。
http://qiita.com/lab3-34/items/e69ab8d0c51c9b64fe02
カスタムアクションのスクリプト
# !/bin/sh
# custom action for SourceTree
# params $SHA
ARCHIVE_TO="$HOME/Desktop/archive_$(date +'%Y%m%d%H%M%S')/"
for commit_hash in $@; do
git diff --name-only ${commit_hash}~...${commit_hash} | git checkout-index --prefix=${ARCHIVE_TO} --stdin
done
使用方法
任意の場所に上記カスタムスクリプトを置いて、 chmod 755 file_name.sh
で実行権限を付与。カスタムアクションの登録。
適当にコミットを選択した状態でカスタムアクションを実行してください。記載のスクリプトでは、デスクトップ上にarchive_#{YYYYmmddHHMMSS}
というフォルダ名でエクスポートされます。
動作の解説
引数に渡されたSHAの前回から今回までの変更(該当コミットの変更ファイル)を取り出して、コミット回数分 checkout-index
を実行しているだけ。
ARCHIVE_TO
変数で出力先を指定しているので、Desktop
出力から変えたい人はそこを変更してください。
注意: ~
展開は行われないため、~
の代わりに$HOME
を使ってください。
(おまけ)カスタムアクションの作り方
パラメータ $SHA
を選択すると、スクリプトの引数に選んだcommitのsha
が渡されます。
hoge.sh 930920094 390239480 098kd09302
shebang
を記述すれば、基本的にどの言語も実行できるようです。
(ターミナル上でファイル名を指定して実行できる形式)
RubyでもPerlでも使えるので、自由度は恐ろしく高そう。