GitやSubversionの差分ファイルを抽出するShell

GitやSubversionの差分ファイルを抽出するShell

GitやSubversionを利用していて、差分ファイル(追加、変更、削除)だけを取得したい場合があります
例としては、FTPする場合が一番多いケースかと思います
そういう時に、非常に便利なツールがあったので、紹介

【変更があったファイルを一覧表示】

Subversionであれば、以下のようなコマンドで変更があったファイル名のみを出力できます

$ svn diff -r 100:HEAD –summarize

が、フォルダが色々だとここからFTPが必要なファイルだけを抽出する・・・なんて作業は結構大変な作業になります

【これまでのやり方】

個人的なやり方ですが、今まではこのような手順を踏んでました

変更があったファイルの取得

$ svn diff -r 100:HEAD –summarize > r100-HEAD.txt

vimで開いた後、:sortと置換

$ vim r100-HEAD.txt
:sort
:%s#^[M|A]\s\(.\)$#cp \1 /some/where/r100-HEAD/\1#g

先頭行に、「#!/bin/bash」を付けて、Shellとして実行

$ shell r100-HEAD.txt

【これらを一気に解決する方法】

こちらのGitやSvnなどの差分ファイル抽出決定版で、詳細は確認可能です
Pythonで書かれてますが、Python2.4以上であればほぼ動作するようです
githubでも公開されています

【入手とセットアップ】

以下のコマンドで入手後、セットアップします

$ cd /usr/local/sbin
$ wget https://raw.github.com/gist/1258524/bef227c642d2e94cc0395a0d68505c6abba8e091/export-diff.py
$ chmod +x export-diff.py

【使い方】

使い方はいたってシンプル

svn diff -r 1234 –summarize | export-diff.py 保存先ディレクトリ

とするだけ

非常に便利なツールだったので、ご紹介でした

【TortoiseSVNでの実現方法】

TortoiseSVNでは、以下の手順で同様の差分ファイルを取得できます

  1. 作業コピーのルートのディレクトリを右クリックして、「TortoiseSVN」メニューから「ログを表示」。
  2. ログが出るので、比較したいリビジョンを選ぶ。Ctrlキーを使って、2つ選ぶ。
  3. 右クリックして、「リビジョンを比較」。
  4. 比較結果が出るので、エクスポートしたいファイル選択する。
  5. 右クリックして、「選択をエクスポート」。
  6. エクスポート先を指定して出力。
  7. ディレクトリ構造を保ったまま出力されます。

【参考】

ref. GitやSvnなどの差分ファイル抽出決定版