目次
差分をフォルダに抽出する
folderName=../diff/date '+%Y%m%d'
/${PWD##*/}/
diff=git diff --diff-filter=d --name-only HEAD^ HEAD
git checkout-index -f --prefix=$folderName $diff
git checkout-index -f --prefix=../diff/date '+%Y%m%d'
/${PWD##*/}/ git diff --diff-filter=d --name-only HEAD^ HEAD
これを使うと「.git」が入っているフォルダの
ひとつ上の階層から「diff/日付/」の中に
「最後のコミット」とその「親コミット」の差分が格納されます。
ひとつ上の階層から「diff/日付/」の中に
「最後のコミット」とその「親コミット」の差分が格納されます。
解説
git checkout-index
指定されたファイルをカレントディレクトリにコピーする
-f (force)
コピー先に同じものがあったら上書きします
--prefix=
カレントディレクトリの'前(pre)'の階層を指定します。
※格納するフォルダ名
git diff xxxxx
上記の例は最後のコミットとその親コミットの名前を出力します
git diff
差分表示コマンドです
--diff-filter=
どの差分を取ってくるか
今回の小文字[d]は削除されたものは取ってこないという意味
--name-only
差分のあるファイルの名前だけ表示
差分の取得
上記の例ではHEAD^とHEADの差分を取得しています。
ここをコミットIDに変えればコミット間の差分も取得できます。
HEAD
最後のコミット
HEAD^
最後のコミットの親コミット
その他
で囲むと先に処理してくれます。
${PWD##*/}
カレントディレクトリが取得できます
差分をフォルダにzipで抽出する
folderName=../archive/date '+%Y%m%d'
/
diff=git diff --diff-filter=d --name-only HEAD^ HEAD
git archive --format=zip --prefix=$folderName HEAD $diff -o ${PWD##*/}.zip
git archive --format=zip --prefix=../archive/date '+%Y%m%d'
/${PWD##*/}/ HEAD git diff --diff-filter=d --name-only HEAD^ HEAD
-o ${PWD##*/}.zip
これを使うと「.git」が入っているフォルダの
ひとつ上の階層から「archive /日付/」の中に
「最後のコミット」とその「親コミット」の差分がZIPで格納されます。
ひとつ上の階層から「archive /日付/」の中に
「最後のコミット」とその「親コミット」の差分がZIPで格納されます。
解説
※「差分をフォルダに抽出する」で説明したものは省きます。
git archive
指定されたファイルのアーカイブを出力する
--format
フォーマットです。今回はzip!!
-o
ファイルを出力する
その次にファイル名を入力
コミット前の差分を抽出する (おまけ)
最後にコミット前の差分を抽出する方法を解説します。
コミット前の差分の抽出は普通にはできないと思います。
git checkout-index -f --prefix=$prefix git diff --diff-filter=d --name-only HEAD
例えばこれですが、変更したファイルが抽出されますが
内容は最後のコミットのものになってしまいます。
なので、そのあとにfor分で差分ファイルをコピーしてくればできます。
prefix=../diff/
diffs=date '+%Y%m%d'
/${PWD##*/}/git diff --diff-filter=d --name-only HEAD
git checkout-index -f --prefix=$prefix $diffs for diff in $diffs do cp $diff $prefix$diff done
使い方
コピペして「.sh」を作ってそれをgit bashとかのCUIにドラッグアンドドロップしてください。
ただ、何かもっといいやり方あるんじゃないの?
っていう気持ちになります。
もっと良い方法を知っている方がいれば
ぜひご教示ください!
https://github.com/417shena/no-commit-diff/blob/main/no-commit-diff.sh