納品を行った後、修正依頼が来て修正対応後 納品する際に「差分ファイルと差分情報が欲しい」と言われることも多々あると思います。
この場合に手動でチマチマやっていると時間がかかりますが、Gitだと簡単に情報がまとめられるとのことなのでそれらの情報をメモしてみます。
やりたいことの流れ
- 初回納品
- 納品バージョンのタグを付ける
- 全てのファイルをZIPにする
- 修正依頼が来てファイルを修正する
- 修正バージョンのタグを付ける
- 差分ファイルをZIPにする
- 差分情報をメモする
初回納品/全てのファイルをZIPにする
まずは納品したいブランチでタグを付ける。納品用ブランチを作っておくとよいと思う。
例としてtag名はv1.0
- 注釈付きタグ名付与
$ git tag -am "納品 Ver1.0" v1.0
- タグを反映
$ git push origin v1.0
または全部のタグをPUSH
$ git push origin --tags
- ZIP化
- そして納品したいtagをZIP化する。ここでは「v1.0」を「hoge.zip」。最新版をZIP化したい場合はHEADでもOK
- rootはファイルを入れるフォルダ名
- hogeは圧縮ファイルの名前
- そして納品したいtagをZIP化する。ここでは「v1.0」を「hoge.zip」。最新版をZIP化したい場合はHEADでもOK
$ git archive --format=zip --prefix=root/ v1.0 > ../hoge.zip
上記で1階層上にhoge.zipができている。
中身を確認して納品
修正対応後 差分ファイルと差分情報をまとめる。
ここから本題
まずは修正してタグ名まで付ける。
$ git tag -am "修正納品 Ver1.1" v1.1
$ git push origin v1.1
差分ファイルのみZIPにする
タグとタグ間の差分ファイルをまとめてZIPにします。変更のあったファイルのみ圧縮されるので納品用にピッタリ。
$ git archive --format=zip --prefix=root/ v1.1 `git diff --name-only v1.0 v1.1` -o ../hoge.zip
リネームしたり削除したファイルがあってエラーが出たらフィルターを掛ける。
$ git archive --format=zip --prefix=root/ v1.1 `git diff --name-only --diff-filter=AMCR v1.0 v1.1` -o ../hoge.zip
追加・修正・コピー・リネームしたファイル
おかしい場合は git diff --name-status --diff-filter=AMC v1.0 v1.1 で該当ファイル一覧をチェックしてフィルターを変更してみるとよい。
後ろのdiffで v1.0 v1.1 としているのは v1.0からv1.1へ削除や加えたファイルなどがあるため。修正なら逆でも問題ないがフィルターの追加と削除の意味が逆になるっぽい。
フィルタ | 意味 |
---|---|
M | 修正 |
A | 追加 |
C | コピー |
R | リネーム |
D | 削除 |
差分情報(Diff)をメモする
- まずは修正したファイルの一覧情報を取得
git diff --name-status v1.0 v1.1
--name-statusでファイル名と変更ステータスのみ表示
- 次に修正したファイルの詳細情報をDIFF
$ git diff --diff-filter=M v1.0 v1.1
- ファイルでHTMLのみピックアップしたい場合は以下
$ git diff --diff-filter=M v1.0 v1.1 *.html
- UTF8でなくてファイルがSJISなどで保存されている場合は以下
$ git diff --diff-filter=M v1.0 v1.1 *.html | iconv -f SJIS
- リネームとかしててファイルを指定していしたい場合は
$ git diff --diff-filter=M v1.0:test.html v1.1:index.html
- 適当にコピってメモ帳に貼り付け
便利!だけど、まだまだ難しい。