gitのログから、変更があったファイルだけを抽出する方法

2016-06-03
git

ようするに、gitを使えない相手に対して、変更があったファイルだけをまとめて送りたいということです。

最初はgit logを見て、一個一個手作業でファイルをコピーしたりしてたんだけど、意外と繰り返し要望がくるのでコマンド一発でやる方法を調べた。

手順

gitでリビジョンの範囲でlogを出すには、こうする。

1
git log [revision1]…[revision2]

そこからファイル名だけを抽出

1
git log [revision1]…[revision2] --name-only --oneline | grep -Ev '.{7} '

さらにファイル名で並べ替えて重複を排除

1
git log [revision1]…[revision2] --name-only --oneline | grep -Ev '.{7} ' | sort | uniq 

最後は、ディレクトリ構造を保ったまま、差分を保存するフォルダにコピーするんだけど、OSX使ってるか、Linux使ってるかでちょっと違う

  • OSXの場合
1
git log [revision1]…[revision2] --name-only --oneline | grep -Ev '.{7} ' | sort | uniq | xargs -I% rsync -R % [差分を保存するディレクトリ]
  • Linuxの場合
1
git log [revision1]…[revision2] --name-only --oneline | grep -Ev '.{7} ' | sort | uniq | xargs -I% cp --parents % [差分を保存するディレクトリ]

これにて、一撃で抽出完了!