ようするに、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 % [差分を保存するディレクトリ] |
これにて、一撃で抽出完了!