Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What is going on with this article?
@NickelCreate

Git diff で差分ファイルを抽出する。大量・大容量ファイルでも大丈夫バージョン

More than 1 year has passed since last update.

やりたいことは差分ファイルの抽出

今回の夢は、指定コミットから指定コミットまでの差分を、ディレクトリ構造そのままで、差分のみzipに圧縮したい願望を叶えることです。

既存記事での差分抽出方法おさらい

色々調べた上で見つかった便利抽出コマンドのおさらいです。
色々なコマンドが見つかりまして、使わせて頂いてました。

git archive revision `git diff --name-only origin/master revision --diff-filter=ACMR` -o diff.zip

diffでファイルリストを出力して、アーカイブでzip可するコマンドですが、
大量のファイルに対応できません

比較的大きなプロジェクトで差分を出していると、すぐにハマります。
なので、これは使わなくなりまして……。

git diff --name-only --diff-filter=ACMR {OLDID} {NEWID} | xargs git archive --format=zip {NEWID}  -o diff.zip

xargsの力で、たくさんファイルがあっても大丈夫! というコマンドですが、
超大量のファイルもしくは、大容量ファイルに対応できません

ここ、きちんと出力できていない事実だけで問題でしたので、原因をそんなに詳しく調べてないのですが、

  • Git Lfsを使っている
  • 1000ファイル以上の大量のファイル
  • mp4等の大容量ファイルを含んでいる

この条件で実行した場合、HEADから数コミット分の差分ファイルしか出力されず、期待したzipを作成できませんでした。

これ以上の差分作成コマンドはネットの海に見当たりません……。
僕は自作を余儀なくされたのでした。

大量、大容量ファイルでも大丈夫バージョンができたー!

git archiveの挙動がエラーも出ず度々変わってくるので、かなり悩まされました。

git diff はどんなにファイルが多くてもすべての差分ファイルリストを出力してくれているようです。

そこで僕は気づきました。

別に git archive使う必要ないんじゃね????

挙動が変なら使わなければいいんですよ。

rm -f diff.zip && git diff --name-only --diff-filter=ACMR {OLD} {NEW} | zip diff.zip -@

これでいいじゃん!!!!

gitに archiveなんて機能があると使いたくなっちゃいますが、 git diffで差分リストさえ出せればどうとでもできるんですよねー。
windowsの人は gitBashとかにでもzipコマンドをインストールしておきましょう。

ただし、チェックアウトしているファイルがzip圧縮されます。HEAD以外の差分抽出は、該当コミットにチェックアウトしてから実行しましょう。

より簡潔にかつスマートなコマンドが出来上がって僕は満足なのでした。

おわり。

0
Help us understand the problem. What is going on with this article?
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
NickelCreate
Vue.jsが好きです!Reactに浮気中です!  テキサスホールデムはもっと好きです!

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
0
Help us understand the problem. What is going on with this article?