リポジトリ内の差分ファイルをとるPythonコードを作った

ゃんとリポジトリ内の変更前と変更後の差分ファイルをとるPythonコードを作った。
→ リポジトリのmainブランチにある全てのコミットで変更されたファイルについて、それぞれのコミットで変更前と変更後のファイルを取得するPythonコード
(※この記事は雑談枠なので、長々と書いていきます。そのため読みづらいかもね。)

簡単な使い方とかメモっておいたから、以下の駄文読みたくない人はQiitaへ
https://qiita.com/Kanoe_qiita/items/264eee50b9cd8799b661

私は、コミットの前後で変更されたファイルのみの変更前と変更後のファイルが取りたかった。
(ソースファイルの解析のために必要でした。)

そこで私は、Googleで軽く検索した。

リポジトリ内の差分を取得するために「git 差分ファイル 取得」とかでググると、出てきたものがざっとこんな感じ。
これらに共通するのが、対象のコミットとその一つ前のコミットを比べて、そこで変更されているファイルについて、現在の状態のものをとってくるものなんよね。

例えば、HEAD と HEAD~ で変更されていたファイルが hoge.c だとすると、現在の状態、つまりHEAD での hoge.c をとってくる。

この手の記事の目標は、多分、「既存の最新状態から、変更した分だけを納品したい」だと思う。
ニーズの多さからか、変更したファイルの現在の状態(修正後)のみを取得するものが多いのは仕方ない。

普通ならこれで十分だが、私は、 HEAD での hoge.c と HEAD~ の hoge.c が欲しかった。

しかし、どちらも取得してくれるものなんてパッと調べてもなかった。

ので、作った。

名付けてgetCommitDiffFile.py

git コマンドには git checkout-index というものがあって、本来はブランチの内容を別のディレクトリに格納してくれる。
それにファイル名を指定すれば、そのファイル名のみを格納してくれるみたい。

だだし、これも現在のHEADのファイルのみとってくる。

ということは HEAD の位置を変えてとっていけばいいんじゃないか。

そんな時に出会ったのが、git switch コマンド
HEADの位置を一時的に変えることができる。

これを組み合わせたら、結果、そのリポジトリ内のmainブランチの全てのコミットでの差分ファイル(変更前・変更後)を取得できた。

まぁ、結構雑な部分はあるけど、私的には十分なので、とりあえずgithubに投げておく。
需要はかなりなさそうだけど(笑)

ソースコード→https://github.com/KanoeGitHub/getCommitDiffFile