以下のコマンドで、OLD_COMMIT と NEW_COMMIT の間に変更があったファイルだけ取り出せる。
OLD_COMMIT バージョンが old ディレクトリに、NEW_COMMIT バージョンが new ディレクトリに出力される。
OLD_COMMIT=$1
NEW_COMMIT=$2
for file in `git diff --name-only $OLD_COMMIT $NEW_COMMIT` ; do
git archive --prefix=old/ $OLD_COMMIT $file | tar -xf - ;
git archive --prefix=new/ $NEW_COMMIT $file | tar -xf - ;
done
-
git diff --name-only
で違いがあるファイルの名前だけを取得する -
git archive
でそのファイルを取り出す
補足:git archive コマンド
git archive
コマンドはちょっと癖があるけど、うまく使うと便利。
- 標準出力に tar 形式で出力されるので、個々のファイルとして取り出すには tar コマンドにパイプする必要がある
- ファイル名を指定すると、特定のファイルだけを取り出せる(tar 展開なのでいちいち mkdir しなくてもディレクトリが生成されるのが嬉しい)
- prefix オプションで出力先ディレクトリを指定できる(このとき、最後にスラッシュを付ける必要がある)