Help us understand the problem. What is going on with this article?

Gitを使って差分ファイルと差分情報を簡単に納品するコマンドのメモ

More than 5 years have passed since last update.

納品を行った後、修正依頼が来て修正対応後 納品する際に「差分ファイルと差分情報が欲しい」と言われることも多々あると思います。
この場合に手動でチマチマやっていると時間がかかりますが、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は圧縮ファイルの名前
$ 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
  • 適当にコピってメモ帳に貼り付け

便利!だけど、まだまだ難しい。

hironaito
スクラムマスター/フロントエンジニアをしています。
yumemi
みんなが知ってるあのサービス、実はゆめみが作ってます。スマホアプリ/Webサービスの企画・UX/UI設計、開発運用。Swift, Kotlin, PHP, Vue.js, React.js, Node.js, AWS等エンジニア・クリエイターの会社です。東京(三軒茶屋)/京都(四条烏丸)/札幌/大阪/福岡に展開中!Twitterで情報配信中https://twitter.com/yumemiinc
http://www.yumemi.co.jp
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした