SVN/GITリビジョン区間の更新ファイルをパッチ化する
はじめに
SVNもしくはGITにおけるリビジョン区間*1の更新ファイルをパッチ化*2する作業が生じたためシェル化メモ。
やりかた(SVNの場合)
# リビジョン区間(r6000-r6100)における更新ファイルについて、 # ディレクトリ構造を維持したままtar.gzに固める svn diff -r6000:6100 --summarize \ | awk '{print $2}' \ | (mkdir patch_dir; \ xargs -I{} cp --parents {} patch_dir; \ tar czvf patch.tar.gz patch_dir; \ rm -Rf patch_dir)
補足すると,以下の様な流れ
- 1行目で、リビジョン区間(r6000からr6100)の更新ファイル一覧を取得
- 2行目で、更新ファイル名のみを抽出
- 3行目で、作業パッチディレクトリを作成
- 4行目で、更新ファイルそれぞれについて、ディレクトリ構造を維持たままパッチディレクトリにコピー
- 5行目で、パッチディレクトリをtar.gzに固める
- 6行目で、作業パッチディレクトリを削除
やりかた(Gitの場合)
# gitでリビジョン区間(リビジョンハッシュA-リビジョンハッシュB)における更新ファイルについて、 # ディレクトリ構造を維持したままtar.gzに固める git diff --name-only リビジョンハッシュA..リビジョンハッシュB \ | (mkdir patch_dir; \ xargs -I{} cp --parents {} patch_dir; \ tar czvf patch.tar.gz patch_dir; \ rm -Rf patch_dir)
補足:SVNでリビジョン区間の更新ファイル一覧を最終更新リビジョンとともに取得
# リビジョン区間(r6000-r6100)の更新ファイル一覧を最終更新リビジョンとともに取得 svn diff -r6000:6100 --summarize \ | awk '{print $2}' \ | xargs -I{} bash -c "( svn ls -v -R {} | awk '{printf \$1}'; echo ' '{} )"