メインコンテンツへスキップ

Gitの巨大ファイル管理、未来はGitそのものだった!?

·3 分
2025/08 Git 大容量ファイル Git LFS クラウドストレージ CI/CD

Gitの巨大ファイル管理、未来はGitそのものだった!?

引用元:https://news.ycombinator.com/item?id=44916783

theli0nheart 2025/08/16 15:03:27

俺がgit-bigstore [0]を、Git LFSが生まれる10年 (!) も前にこの問題解決のために作ったんだ。今でも完璧に動いてるはずだよ。.gitattributesでファイルを指定して、2つのコマンドで同期するんだ。
GitHubがLFSを出したから諦めてたけど、コメントを見る限りまだ需要がありそうだよ。ちょっと手を入れる必要はあるけど、アイデアはしっかりしてる。低レベルな実装についてはwiki [1]に書いたから見てみて。
あと、すべてのメタデータはgit notesを使って保存されてるから、完全にポータブルでフロントエンドに依存しないんだ(もちろん、ストレージバックエンド以外はね)。
[0]: https://github.com/lionheart/git-bigstore
[1]: https://github.com/lionheart/git-bigstore/wiki

bob1029 2025/08/15 23:49:48

Large object promisorsのアプローチはすごくいいな。S3みたいなものを使えるなら、俺もGit LFSから乗り換えるよ。S3はVCSで大きなBLOBを扱うのにめちゃくちゃ相性良さそうだよな。インテリジェントな階層化機能で、古いデータが自然とコールドストレージに移動するのもいい。10年前のものをプルするのに半日かかっても、全然気にしないね。

riedel 2025/08/16 09:31:13

記事でgit lfsの代替としてgit annexdvcがS3に対応してるって言ってるね(windowsだとシンボリックリンクのワークフローでちょっと面倒だけど)。GitLabgit lfsをS3にオフロードしてるしね。どれも一長一短あるんだ。俺はだいたい迷わずLFSを選ぶけど、ワークフローやインフラの要件に合えば他のも使うよ。
特に2GBのファイルとか、25MBのファイルだけじゃない場合は、ハッシュアルゴリズムと変更検出(いつそれが起こるか)が違いを生むんだ。

a_t48 2025/08/16 00:30:31

今の職場で、コスト削減のためにすべてのLFSオブジェクトをバケットにキャッシュしてるんだ。PRが実行されるたびに、git lfs ls-filesでオブジェクトリストを取得して、GCPから同期、git lfs checkoutでリポジトリをLFSオブジェクトストアから実際に埋めて、キャッシュされてない分はgit lfs pullで取得。もし未キャッシュのオブジェクトがあれば、gcloud storage rsyncでアップロードしてる。シンプルだし、開発者は新しいオブジェクトをプルするだけでいいから設定も不要、GitHub UIも混乱しない。GitHubCIでのLFSファイルのプルにめちゃくちゃ課金してきたから、とりあえずこれで解決したんだ。もっとキャッシュサイズ増やせたり、キャッシュ制御が改善されたりするといいんだけどな。

tagraves 2025/08/16 02:57:12

RWXでもLFSファイルをプルするときに、これと似たようなアプローチを使ってるよ [1]。git lfs ls-filesLFSファイルのリストを取得して、そのリストをタスクに渡して、curlを使ってLFSエンドポイントから各ファイルをプルしてるんだ。
RWXではタスクの出力は入力が変わらない限りキャッシュされるから、LFSファイルはRWXキャッシュに残り、将来のCIでのクローン時にそこからプルされるんだ。これによってGitHubLFS帯域幅コストを節約できる上に、RWXキャッシュからのリストアはgit lfs pullよりもはるかに速いよ。
[1] https://github.com/rwx-cloud/packages/blob/main/git/clone/bi

a_t48 2025/08/16 07:29:40

いいね!俺もプルスルーキャッシュを検討したんだけど、バケット以上のインフラ設定が不要なソリューションを選んだんだよ。

cyberax 2025/08/16 05:33:44

「キャッシュサイズをもっと増やせるようにしてほしい」って要望、GitHubの公開ロードマップによると、Q3に対応予定みたいだよ:https://github.com/github/roadmap/issues/1029

a_t48 2025/08/16 07:33:06

素晴らしいね。技術的には今でも制限を超えられるけど(うちのは93/10GBって表示されてた)、追い出しポリシーが分からないんだ。もう少し払って、データが確実に残る方が安心できるな。

gmm1990 2025/08/16 02:28:07

GitHub CIでこれだけカスタマイズする手間をかけるなら、オープンソースCIをローカルで動かすとか、GoogleEC2みたいなものを使えばいいんじゃない?

a_t48 2025/08/16 07:25:30

GHAのaction.ymlでカスタムビルドを組むのに半日かかったけど、帯域とビルド時間を節約できたから投資の価値はあったね。今のビルドは全部GHAだし、他のシステムへの移行は考えてないよ。次はGHホストからGCEワーカーに移行してDockerキャッシュを温めたいな。GCEは4倍安いし、ビルドも速くなるはず!でも、僕がこれに取り組むには機会費用が高いんだよね。

gmm1990 2025/08/16 21:09:33

へぇ、面白かったよ。GitLabとかGitHubのランナーって高いって聞いたから、ベアメタルサーバーでCIランナーをセットアップするのに時間使っちゃったことがあるんだよね。

fmbb 2025/08/16 07:45:16

公式のDockerビルドプッシュアクションって、GitHub Actionsキャッシュを使ったキャッシングはサポートしてないんだっけ?

a_t48 2025/08/16 19:20:13

そうなんだ。うちだとML依存関係で1イメージプッシュが10GB超えるんだよね。レイヤーキャッシュをサポートしてても、リリースブランチ間では共有できないし(https://github.com/docker/build-push-action/issues/862)。それに、複雑なビルドでキャッシュを確実に使うなら、Docker BuildXのディスク状態を使うのが一番信頼できるよ。今、リモートキャッシュだけで100%キャッシュされたリビルドができない問題があるんだ。Dockerチームに報告するべきだけど、最小限の再現手順がないし、俺のせいかもしれない可能性も10%あるんだよね。

kylegalbraith 2025/08/17 13:48:30

Depot(https://depot.dev)を試してみてよ。俺はDepotの創設者なんだけど、これ、まさに僕らが作った目的の一つなんだ。レイヤーキャッシュを実際のNVMeデバイスに永続化して、ビルド間で自動で再アタッチするから、ネットワーク経由とかGitHub Actionsのキャッシュの制約を気にする必要がなくなるんだ。

nullwarp 2025/08/16 01:11:52

そうそう、同感だよ。なんで最初からそれがデフォルトじゃなかったのか不思議だけど、出始めの頃はまだ一般的じゃなかったのかな。だから僕は小さいGit LFSサーバーを自分で動かしてるんだ。GitがS3をネイティブでサポートするようになったら、すぐにでもそっちに切り替えるつもりだよ。

_bent 2025/08/16 12:55:52

今はね、GitHubのリポジトリにあるLFSファイルを、僕のhomelabにあるMinIOインスタンスに保存するためにhttps://github.com/datopian/giftlessを使ってるよ。S3とLFSを繋ぐ他のプロジェクトもいくつかあるけど、この設定が一番うまくいってるんだ。

account42 2025/08/18 09:26:42

でもさ、Gitクライアントって、なんでこれに特定のサポートが必要なの?Gitホストが特定のオブジェクトのリクエストを別のホストにリダイレクトして、それらをバンドルにパックするのを、今、何が邪魔してるの?

bayindirh 2025/08/16 08:39:52

独自のS3互換ストレージシステムはオンプレミスにインストールできるんだよ。ScalityやJuiceFSみたいなシンプルなデーモンから、TrueNASみたいな小規模アプライアンス、Cephみたいな本格的なストレージクラスターまで色々あるね。OpenStackにはSwiftっていう独自のオブジェクトストレージサービスもあるし。データセンター向けなら、富士通、レノボ、ファーウェイ、HPEとかの大手企業が、高速なS3対応「オブジェクトストレージ」を喜んで売ってくれるよ。

yugoslavia4ever 2025/08/16 09:04:11

CIやローカル開発テストには、DockerコンテナでAWSサービスを模倣するLocalstackが使えるよ。

bayindirh 2025/08/16 09:06:25

Localstackは面白いね。うちはAWS使ってないけど、AWSユーザーにはいい選択肢だ。ScalityのオープンソースS3 Serverもコンテナで動くよ。

StopDisinfo910 2025/08/16 10:04:47

S3はAmazonのオブジェクトストレージサービスの名前だよ。互換APIを持つ他社のソリューションをS3と呼ぶのはちょっと違う気がするな。

flohofwoe 2025/08/16 07:23:22

AWSの’クラウドストレージサービス’のことだよね。

dotancohen 2025/08/16 07:50:29

実際は’Simple Storage Service’の略で、S3なんだよ。

jauer 2025/08/15 22:15:27

記事がGit LFSをプロプライエタリでベンダーロックインって批判してるけど、GitHubがオープンなクライアントとサーバーを提供してるから公平じゃないね。LFSはオフライン操作を壊すけど記事は触れてない。Promisorsも同じだろうな。git partial cloneの例はいいね!Large Object PromisorsはLFSの複雑さをサーバー側に移し、さらに複雑にしてるように見えるな。クライアントはGitサーバーにアップロードし、Gitサーバーがオブジェクトストアにアップロード、クライアントはオブジェクトストアから直接ダウンロードするのか?公開Gitサーバーが隠れたpromisorリモートにアップロードするケースがどれくらい問題になるか気になるよ。

IshKebab 2025/08/15 22:24:28

Git LFSはマジでダメ。サーバー実装がひどいし、ファイルの中身と保存方法を混同してる。オプトインのやり方も最悪で、普通にやると欲しいファイルじゃなくて、小さなテキストファイルになっちゃうんだ。彼らのソリューションが良いかは分からないけど、LFSがダメなのは間違いないよ。

ozim 2025/08/16 06:55:22

大きなファイルはリポジトリに保存せず、別に管理するべきだと思う。そういう使い方には出会ってないけど、コードと一緒にデカいファイルをリポジトリに入れるメリットがよく分からないな。

tsimionescu 2025/08/16 08:56:26

それは多くのケースで無理だよ。デカいファイルだってコードと同じようにブランチを切ったり、いつなぜ変わったか知ったり、古いバージョンでどう動いたかチェックしたりする必要があるんだ。コードは小さいことが多いけど、だからってプログラムの全てのソースファイルが小さいわけじゃないんだからさ。

ozim 2025/08/16 11:34:50

そうだけど、Gitはそのためのツールじゃないんだよ。なんでみんな’Gitを使わなきゃ’って思ってるのか分からないな。バージョン管理や追跡は、他にもいろんな方法でできるんだからさ。リポジトリにはリンクみたいな参照だけ保存すればいいじゃない。

jayd16 2025/08/16 00:17:06

この新しい提案もLFSと同じ問題を抱えてる気がするなー。プロミサーにアクセスできないと、ラージファイルが壊れるっていう同じ問題が起こるんじゃない?

cowsandmilk 2025/08/16 01:02:58

なんでだよ?この提案は git lfs install を実行しなくても、ちゃんとファイルを取得できるはずだけど?

もっとコメントを表示(1)
AceJohnny2 2025/08/16 01:23:25

LFSのダメなところは他にもあるんだ。リポジトリを移行すると、LFSオブジェクトがない過去のコミットにまで.gitattributesが追加されちゃうんだよ。例えばCコミットでラージファイルを追加しても、AやBコミットまでLFS参照が入っちゃうってこと。

actinium226 2025/08/16 02:48:21

そんなはずないだろ。前のコミットにファイルが追加されるなんてこと、あるわけないじゃん。ハッシュが変わっちゃうから、色々なものがぶっ壊れちゃうぞ!

cma 2025/08/15 22:58:59

Git LFSってさ、SSHだと動かなかったんだよね。SSL証明書が必要で、GitHubもそれがセルフホストする人にはハードルだって分かってたみたい。GitLabはSSH対応のパッチを当てた気がするけど。

AceJohnny2 2025/08/16 03:24:59

git lfs migrate はコミットを書き換えちゃうから、ハッシュは変わるんだよ。これは公式ドキュメントにも書いてある。普通は新しいコミットだけが対象だけど、俺はリポジトリ全体をLFS化したかったから、過去のコミットまで.gitattributesが汚染されてガッカリしたよ。詳しくはここを見てくれ!
https://github.com/git-lfs/git-lfs/blob/main/docs/man/git-lfs-migrate.md

jayd16 2025/08/16 01:57:36

もしアーキテクチャがどうでもよくて、デフォルトでオンにするだけなら、Git LFSでもとっくにできてたはずだろ。

actinium226 2025/08/16 12:49:53

ドキュメントの2パラグラフ目にこう書いてあるぞ、「git lfs migrate はデフォルトで現在チェックアウト中のブランチと、リモートにないコミットで追加されたファイルだけを操作する」って。もしかしてリモートの設定が間違ってたんじゃないの?

remram 2025/08/16 00:53:44

Let’s Encryptはさ、Git LFSが始まる3年前にローンチしてるんだぜ。

IshKebab 2025/08/16 11:58:37

「Gitはそういうツールじゃない」って言ってるけど、それはGitがラージファイルの追跡がまだ得意じゃないからであって、Gitの根本的な特性じゃないだろ。改善できるはずだよ。あと、「GIT」じゃなくて「Git」ね。

da_chicken 2025/08/16 17:57:26

バージョン管理システムはプロジェクト管理のツールで、ソースコード専用じゃないんだ。プロジェクトを複数のストレージに分けるのは、管理上ありえない。みんな一緒にしたいのは、デジタルファイルのプロジェクト管理の基本機能として、全部まとまってるのが大事だからだよ。デジタルファイルのバージョン管理や、リリース・ビルド計画との連携は必須なんだ。それが実際のプロジェクトの要求だね。デジタルアセットを含むプロジェクトは、バイナリや大きなデータファイルがつきものだし、テキストファイルだけってプロジェクトはむしろ珍しい。Linuxカーネルは、グラフィックとか大きな固定データがないから独特なんだ。Gitプロジェクトの全てが小さなテキストファイルじゃなきゃダメって考えは、マジで変だよ。ビデオゲーム、ウェブサイト、ウェブアプリ、データ駆動API、地理データ、画像、動画、音楽、ドキュメント…どれもバイナリファイルを使うでしょ?
選択肢は二つ。
1. Gitは、現実のプロジェクトに役立つ汎用VCSである。
2. Gitは、バイナリや大きなファイルを許可しない。
大きなファイルのバージョン管理って、そんなに複雑な問題じゃないんだ。差分やマージを気にしなくていいなら、管理はもっと簡単になるよ。

thayne 2025/08/16 04:50:56

Git LFSがデフォルトでできないのは、次の理由からだね。
1. Gitとは別にインストールが必要。
2. GitフィルターやGitフックを使うから、ローカルでの設定が必要。
Gitに最初から組み込まれていれば、こんな問題は起きないのにね。

AceJohnny2 2025/08/16 17:40:04

また同じこと言うけどさ、『俺の場合はリポジトリ全体をLFSに変換してた』って言ったじゃん。マニュアルの”INCLUDE AND EXCLUDE REFERENCES”ってセクションをチェックしてみてよ。

vlovich123 2025/08/16 05:15:06

クラウドストレージからオブジェクトがなくなったり、ストレージが何度も移行されて、アーカイブに必要な古いストレージが使えなくなっちゃったらどうなるの?

atq2119 2025/08/16 14:49:06

そういう場合はエラーになるのは当然だよね、良くないけど。でも、元の人は、Git LFSにはネイティブなGitじゃ起こらない種類のエラーが他にもあるって指摘してたんだ。例えば、Gitアクションを途中で中断すると、Git LFSでは一貫性のない状態になっちゃうけど、ネイティブGitならそんなことは起こらないんだ。

IndrekR 2025/08/16 10:23:16

Let’s Encryptは2012年に設立されて、2015年12月に一般公開されたね。Git LFSは2014年半ばだから、だいたい同じくらいの時代だ。

ozim 2025/08/16 20:50:33

Gitが大容量ファイルの追跡に優れていないのが欠陥だとか、それが改善点だとかいう意見には反対したいね。

xg15 2025/08/16 08:13:05

でも、もし問題がそれだけだったなら、LFSプラグインをGitのコア部分にすればよかっただけなんじゃないの?

actinium226 2025/08/16 22:31:02

OK、君の主な不満は、以前のコミット全てに.gitattributesが追加されることだったんだよね?もし誰かが昔のコミットに.binファイルを追加した場合、それでもLFSに入れたいと思うでしょ?“現在のコミットとの相互参照”がどういう意味なのか、俺にはちょっと分からないな。mainとか別のブランチの.gitattributesを使いたい理由も分からないし。明示的に指示されない限り、別のブランチを参照する操作って、すごくGitらしくない気がするんだけど。まあ、とにかく、LFSは履歴に適用しようとすると履歴を書き換えるのは確かだね。それが最善じゃないのは同意するよ。履歴をめちゃくちゃにして、特定のGitハッシュへのリンクを壊すリスクもあるしね。

tsimionescu 2025/08/16 13:03:26

大事なのは、二つの履歴を分けたくないってことだよ。もし君のユースケースが大容量ファイルにすごく依存してるなら、このユースケースにもっと向いている別のSCM(SVN、Perforceとか)を選ぶべきだね。でも、ファイルごとに違うSCMを使うのは、もう最悪な結果になるだけだよ。

jayd16 2025/08/16 16:26:01

ラージファイルを特別扱いする現在のGit LFSのような設計は根本的な問題だと思う。公式の新しいシステムも結局同じような振る舞いになりそうだよね。UXの問題は解決してほしいけど、Gitメンテナがちゃんと改善してくれることを祈るしかないなぁ。
自然に解決するとは思えないんだよね。

thayne 2025/08/19 01:18:55

もし今の問題がなくなったら、それはもはやGit LFSじゃなくて、全然別のものになるんじゃないかな。

mafuy 2025/08/16 11:53:20

Git自体は良いツールなんだよ。ただ、このラージファイル管理の仕事には向いてないだけなんだ。

rcxdude 2025/08/18 11:02:37

問題なのは、リポジトリでGit LFSを使い始めるのとは違って、移行する時にはメタデータが「過去に遡って」伝わることなんだ。
これじゃあ、実際のコミットにある内容が反映されないんだよね。

gradientsrneat 2025/08/16 16:51:09

LFSってオフラインでの操作を壊しちゃうって話、僕も同じこと思ったよ。
Git annexはもっと分散的で、いろんなリモートにあるラージファイルの存在を追跡できるんだ。
USBドライブみたいなファイルシステムリポジトリからでもラージファイルを引っ張ってこれる。
でも、めっちゃ複雑で使いにくいのが欠点だよね。

Ferret7446 2025/08/16 01:07:11

この記事はGit LFSを不公平に扱ってると思うな。Git LFSはGitHubにロックインするわけじゃないし、プロトコルはオープンだよ。
Git拡張としてのLFSの欠点は避けられないんだ。PromisorsはLFSと同じコンセプトだけど、Gitに組み込まれてるからもっと良いUXを提供できるんだよね。

andrewmcwatters 2025/08/16 02:19:41

一度Git LFSをリポジトリで使うと、永久にロックインされちゃうんだ。
消費されたスペースを削除するには、GitHubからリポジトリを消すしかないって知ってた?
こんな振る舞いはどこにも明記されてないし、僕の会社でGitHubの統計調査してた時、ラージな圧縮データベースを保存するのに使ってて困ったよ。

throwaway290 2025/08/16 02:23:33

これってGitとGitHubを混同してるよね。GitHubはひどいってのは今に始まったことじゃない。
Git自体は問題ないし、Git LFSはGitの拡張機能だよ。
Git LFSの仕様にはストレージの課金の話なんてないし、誰だってより良いサーバーを書けるんだから。

andrewmcwatters 2025/08/16 02:27:24

Gitの利用は圧倒的にGitHub経由だから、GitとGitHubを切り離して考えるのは難しいよ。
他の使い方はほとんど誤差みたいなものだしね。
だから、一番人気のGitホストで一番使われてるGitのラージファイル拡張機能が、ユーザーをロックインするってのは、知っておくべきめちゃくちゃ役立つ情報なんだ。

throwaway290 2025/08/16 02:44:06

それって、すごく悪いロジックだよ。その論理だと、GitHubがダメだからGitもダメってことになるじゃん。みんながそれを混同するたびに、俺はイライラするんだよね。もっとちゃんと知ってるなら、なんで…?GitHubがダメだって言うだけでいいじゃん。

integralid 2025/08/16 12:51:07

>圧倒的にGitはGitHub経由で使われてる。他は誤差程度
これって本当?俺は商用でGitを5社で使ったけど、GitHubを商用で使ったことはないよ(オープンソースプロジェクトのプラットフォームとしては別だけど)。
GitHubにプロジェクトをホストしてたら、GitHubに依存してることになるけど、ロックインされてるわけじゃないよね?GitHubのリポジトリを閉じて、他のとこに移行できるんだから。何か見落としてるかな?

bobmcnamara 2025/08/16 14:25:58

>でもロックインされてない、他のとこに移行できるから。
Git LFSを使っていたら、リポジトリをフォークして書き換えて、.lfsconfigのバックエンドURLを更新しないと、まともに動く状態に戻せないよ。

もっとコメントを表示(2)
KronisLV 2025/08/16 09:31:16

>そして問題は大きい:
>高いベンダーロックイン – GitHubがGit LFSを作ったとき、他の大容量ファイルシステム—Git Fat、Git Annex、Git Media—はサーバーサイドに依存しなかった。でもGitHubは独自のサーバー実装にユーザーをロックインして、利用料を徴収した。
これって今でも問題なの?
俺は今週Git LFSをGitLabインスタンスで使ったけど、問題なく動いたみたいだよ。
https://docs.gitlab.com/topics/git/lfs/
その1週間前にもGiteaインスタンスでGit LFSを使ったけど、これも問題なかった。
https://docs.gitea.com/administration/git-lfs-setup
LFSが将来的に非推奨になるとかいう話を聞く一方で、使ってる人をほとんど見かけないから、みんな気にせず画像とかを普通のGitに突っ込んでるのが、なんか不思議なんだよね。

technoweenie 2025/08/15 23:40:03

Gitコアでデカいファイルをサポートしてくれるのは本当に嬉しいよ。外部のソリューションだと、結局同じようなオプトインの手続きが必要になるしね。俺はできるだけコマンド少なく、シームレスに動いてほしかったから、APIは’.gitattributes’ファイルのsmudgeとcleanフィルターに限定したんだ。
ベンダーロックインをなくすために、AtlassianやMicrosoftとかなり早い段階から直接協力したんだ。特にAtlassianにはファイルロックAPIでたくさん助けてもらって、素晴らしい協力関係だったよ。LFSはオープンソースとして、3つの異なるGitホストで互換性ありでリリースされたんだ。

glitchc 2025/08/15 22:19:21

いや。これは解決策じゃない。
Git LFSは今のところごまかしに過ぎないし、クローン操作中にフィルター引数を書くのも長期的な解決策にはならないって。
git cloneって、ほとんどの人がGitを学ぶ時に最初に実行するコマンドじゃん?強調しとくけど、最初のコマンドだよ。
フィルターを書くことを覚えてくれるかな?多分、クールなコードベースのチュートリアルに書いてあれば覚えてくれるかもしれない。でも、もし書いてなかったら?気づかないまま時間がかかるかもしれない。もし覚えたとしても?クローンしたリポジトリはコンパイルできなかったり、使えなかったりするかもしれない。だってblobが欠けてるんだからね。
仮にちゃんとできたとしても、みんな理解できるかな?ほとんど無理だよ。俺たちはGitの内部構造を、みんなが最初に学ぶコマンドで晒してるんだ。「blobって何?」「なんでフィルターが必要なの?」「blobはどこに保存されるの?」って、まさに抽象化の漏洩じゃん。
これってRsyncがやってて、もう解決済みの問題だよ。その実装をただ持ってくるだけでいいんだ。つまり、代替の表現をサポートするか、blobを完全にやめるってことなんだけど、Gitのメンテナーたちはそうしたくないみたいだね。

ks2048 2025/08/15 22:44:16

>これは解決済みの問題: Rsyncがやってる。
どんな解決策なのか説明してくれる?Rsyncアルゴリズムの詳細じゃなくて、ユーザーから見てどうなるのかを知りたいんだ。「git clone」したら、ローカルファイルシステムにどんなファイルがあるの?

hinkley 2025/08/15 23:06:01

シャロークローンならファイルは何も存在しないけど、フルクローンだと各バージョンの各blobがフルコピーで手に入るんだ。そして提案されてるのは、各リビジョンを最後のRsync操作として扱うってこと。ファイルをいじる回数が多いほど、それはアセットでもそうだし、コードの正確なスナップショットを取るために依存関係をチェックインした場合でもそうだけど、それがたくさんの大きなファイルの変更になるんだ。

tatersolid 2025/08/16 03:33:47

画像や音声、動画みたいなほとんどのデカいアセットは、Rsyncアルゴリズムを使ってもメリットはほとんどないよ。ファイルをちょっと「調整」しただけでも、フォーマット的にはバイトレベルでめちゃくちゃ大きな違いが出ちゃうのが普通だからね。

TZubiri 2025/08/16 04:58:47

動画はGitの範囲外かもしれないね。YouTubeですら動画の「更新」はできないんだから。
これ、めちゃくちゃ変に聞こえるかもしれないけど、動画のソースコードをスクリプトにしちゃって、ビルドするプロセスで動画を作って、それをリリース用の成果物にするのはどうかな?

IshKebab 2025/08/15 22:25:41

Gitってさ、昔からフラグ追加して問題解決するけど、99%のユーザーはそんなの絶対見つけないよね。デフォルト設定を直そうとしないんだよな。後方互換性壊さずにデフォルトを変えることだってできるのにさ。

Jenk 2025/08/15 22:39:49

「デフォルトを直さない」ってのはちょっと違うんじゃない?Git 2.0でpushのデフォルト設定を”matching”から”simple”に変えたことあったじゃん。

spyrja 2025/08/15 23:11:51

Gitの肥大化ってほとんどが過去の履歴が原因って言うのは間違ってる?もしそうなら、最新バージョンのファイルだけをrsyncみたいにダウンロードするアプローチが一番いいんじゃないかな?ほとんどの人はそれだけで十分なはずだしさ。

hinkley 2025/08/15 23:09:09

「止まった時計が2度目に正しかったのはいつ?」って話だけど、俺は前のコメントに同意。Gitコミュニティって、チームの問題を解決するのに、デフォルト設定できないような一時しのぎの修正ばっかするんだよな。sparse checkoutとかコミット後のノート追加とかさ。これって、プルやプッシュするたびにめちゃくちゃ手間がかかるってことじゃん。IDEからは絶対使えないし。ホントの修正の邪魔をしてるだけだよ。

pizza234 2025/08/15 23:25:56

「Gitの肥大化ってほとんどが過去の履歴が原因?」ってのは、俺の経験からすると違うと思う。リポジトリをシャロークローンしても、容量の節約って思ったほどじゃなかったんだ。つまり、履歴はかなり効率的に保存されてるってことだね。

smohare 2025/08/16 00:17:54

俺はGitが出たときから使ってるけど、IDEで使ったことなんて一度もないよ。ツールをちゃんと学ぼうとしないユーザーがターゲットになるべきなの?もちろん、インターフェースが大事じゃないとは言わないけどさ。俺はjqのインターフェースは最悪だと思ってるけど、Gitで同じように使いこなせないなんて想像できないんだよね。

spyrja 2025/08/16 00:23:16

ちょっと調べてみた感じだと、Gitはガベージコレクションで余計なファイルをちゃんと消してるから、前のコメントの「履歴は効率的」って話は合ってそう。でもさ、GitはMercurialみたいに差分じゃなくて、完全なファイルを保存してるんだよね。だから、やっぱり今のスナップショットだけを先にダウンロードするってやり方が効果あるかもな。

expenses3 2025/08/16 10:44:44

マジそれな!もしGitでデカいファイルが使えないなら、それはGitのバックエンドとかクローン機構が悪いってことだよ。そこをちゃんと直して、次のステップに進もうぜ。

TZubiri 2025/08/16 04:55:22

「フィルターを書くの忘れる?」って話だけど、フィルターを書くのを忘れたって全然問題ないんじゃない?もし作業に10分以上かかってるなら、その時にフィルター書けばいいんだし。

yencabulator 2025/08/17 16:51:07

「ビデオのソースコードはスクリプトで、ビルドしたらリリース版のビデオができるって、これってありえない話?」って提案だけど、実はそういうのってある程度もう実現されてるんだよ。でもそれって、すべての元映像にアクセスしなきゃいけないし、高品質でちゃんと圧縮されたビデオファイルをレンダリングするのにはめちゃくちゃ時間かかるんだよね。詳しくはこれ見て。
https://en.wikipedia.org/wiki/Edit_decision_list

qubidt 2025/08/16 09:00:13

これってかなりニッチだけど、アニメのファンエンコードで使われてるよ。一部のグループはVapoursynthスクリプトを公開してて、同じ元動画があれば同じ再エンコードができるんだ。例えば、LightArrowsEXEのEncoding-ProjectsやBeatrice-Rawsのencode-scriptsを見てみて。
https://github.com/LightArrowsEXE/Encoding-Projects
https://github.com/Beatrice-Raws/encode-scripts

Too 2025/08/16 05:06:39

え?なんで初心者に意味なく10分も待たせるわけ?自分が何間違えたのか、どれくらい待つのが普通なのか、どうやって分かるの?ChatGPTに「Gitクローンが10分かかるのはなぜ?」って聞けってこと?!ユーザー体験としてこれがベストなわけないよ。Gitはもっと改善する必要があるね。

krupan 2025/08/17 02:58:47

まさにそれだよ、今回の変更で対応してるんだけど、デフォルトにならないのは、多くの人がGitにテキストしか置いてないから、これらの変更によるデメリットを避けたいんだよね。

cesarb 2025/08/16 10:16:46

Gitは論理的には完全なファイルを保存するモデルだよ。でも物理的には、これらの完全なファイルはpackファイル内で差分(deltas)として保存されてるんだ。まだパックされてない新しいファイルは別だけどね。デフォルトでは、Gitはたくさんのloose filesがあると自動的にパックするし、ネットワークプロトコルで送受信するときも常にパックされるよ。

bogwog 2025/08/16 19:24:45

手動フィルターが最善策かは分からないけど、これで多くの足りない部分が補われる気がするね。Gitの初回コミット時みたいに、デフォルトのグローバルフィルターサイズに引っかかるリポジトリをクローンした時に、無効化する方法を教えてくれると良いな。「クローンしたリポジトリはブロブがないからコンパイル/使用できないかも」ってあったけど、LFSみたいに大きいファイルの全履歴ダウンロードを防いで、必要なバージョンだけチェックアウトするのがフィルターの目的なんじゃないの?1バイトのフィルターでもワーキングツリーは使えるけど、過去のコミットをチェックアウトしようとすると全ファイルダウンロードが必要になるってことかな。

TZubiri 2025/08/17 21:35:37

うーん、動画自体は「アニメX シーズン1 第5話」みたいなインデックス可能な識別子で参照されるんだろうね。実際の動画のプロビジョニングは、ビルドする人が(多分Torrentネットワークか、誰もやらないだろうけどDVDから)入手することになるんだろうな。

TZubiri 2025/08/17 21:29:54

それは「ビルド」を瞬時に終わるもの、あるいは数時間で完了するものと見なす場合に限った問題だね。科学における再現性と似てるよ。LHCみたいに再現がとてつもなく高価な実験もあるけど、技術的には再現可能なんだ。

TGower 2025/08/15 22:52:13

「クローンしたリポジトリはブロブがないからコンパイル/使用できないかも」って話だけど、ブロブの履歴だけがフィルターされるんだよ。

cyberax 2025/08/16 05:41:17

多くの動画編集って、動画全体の作り直しじゃなくて、一部の映像を繋いだり削除したりすることなんだよね。こういう使い方なら、ローリングハッシュを使うrsyncがすごく役立つはずだよ。

記事一覧へ

海外テックの反応まとめ
著者
海外テックの反応まとめ
暇つぶしがてらに読むだけで海外のテックニュースに詳しくなれるまとめサイトです。