LoginSignup
2
2

More than 5 years have passed since last update.

(Mac) SourceTreeでコミットしたファイルたちをエクスポートする

Posted at

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

gistもつくりました

使用方法

任意の場所に上記カスタムスクリプトを置いて、 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でも使えるので、自由度は恐ろしく高そう。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2