Vim
Git

git diffからのvimで変更行数が少ないファイルの順番にソートして無駄ファイルをコミット対象から外す

リリース前にテーブル・ストアド・VIEWの変更差分を洗い出したいときってありますよね。
開発環境でガンガン更新した後、さてリリースしようと思ったものの、「うわっ、私の変更、多すぎ・・・!?」ってなったとき、スクリプト化して本番と見比べるってのが常道であり王道であります。

というわけで、データベースの大量のストアドやテーブルなどの差分を見る作業を効率よくしたい。
見たいのは変更分が多いものであり、検証用DB名などが混ざっているだけの変更はノイズでしかない。
また、空行などが変更分として数えられているものも除外したい。

前提

  • gitで一度でもスクリプト化したものを扱ったことがある
  • ストアドなどのSQLServerオブジェクトをスクリプト化する手順が確立している。
  • vimでファイルエディットが出来る

まずはdiffを取得。各ファイルでどのくらいの差分があるのかを検証したいので、空白・空行抜きの行数情報だけをファイルとして出力。

git-bash
git diff --stat-width=800 -w --ignore-blank-lines > diff.patch

出力されたファイルは、

ファイル名 | 変更行数 +-

と言うような形式になってると思うので、パイプ後の数値の順番に並び替えしたい。
vimを開き、行数の降順で並び替え。
あとで行数検索するので、ここは降順でも昇順でも、ていうか何もしなくても構わないです。

vim
%sort! /[^|]*\|/

まず、変更差分が0行のものを全検索。

vim
|\s\+0$

0行以外の行を削除。これで変更差分がないものが抽出出来る。

vim
v//d

sqlファイル名を抽出

vim
\/\w\+\.sql

あとはファイルをこねこねとエディットして(vimなら楽勝ですよね)、

git-bash
git checkout ファイル名1.sql
git checkout ファイル名2.sql
git checkout ファイル名3.sql
…

これをgit bashに一括で流す。
git checkout のファイル名複数記載は出来ないみたいなので、一つ一つやってます。

これで、変更差分のあるSQLファイルだけを抽出出来ました。