git statusが43秒かかっていたのを1秒に高速化する大規模Gitリポジトリの操作を高速化するためのscalarを紹介

git

Git 2.38がリリースされました。

このバージョンから大規模Gitリポジトリの操作を高速化するscalarが同梱されるようになりました。

今回はこのscalarによって、どれぐらいGitの操作が高速化されるのかを簡単に検証します。

結論から言うとgit statusが約43秒かかっていたのが約1秒で操作できるようになります。

スポンサーリンク

Install Git 2.38

Git 2.38からscalarが同梱されましたので、各自の環境にあわせてInstallなりVersionUpなりをしてください。

$ git --version
git version 2.38.0

Before

大規模Gitリポジトリとしてchromiumを利用しました。

普通にgit cloneしてきて、git statusを実施すると約37秒かかります。

❯ time git status
On branch main
Your branch and 'origin/main' refer to different commits.
  (use "git status --ahead-behind" for details)

nothing to commit, working tree clean
git status  6.38s user 265.64s system 737% cpu 36.865 total

Setup

scalarを有効にするためには以下の2つのGitの設定を有効にする必要があります。

  • core.fsmonitor
  • core.untrackedcache

私はglobalで設定を有効にするので、以下のコマンドを実施しました。

$ git config --global core.fsmonitor true
$ git config --global core.untrackedcache true

globalで有効にする必要のない方はオプションを外して実施してください。

scalarの有効化

scalarを有効にするためには、対象のリポジトリをscalrに登録する必要があります。

今回はchromiumをgit cloneしてきたリポジトリのパスで以下を実施します。

$ scalar register

scalarの効果

ここまでで、chromiumのリポジトリではscalarが自動的に有効になるようになりました。

最初のgit statusはindexなどが作られるため少し遲くなります。約1分32秒かかりました。

❯ time git status
On branch main
Your branch and 'origin/main' refer to different commits.
  (use "git status --ahead-behind" for details)


It took 2.12 seconds to enumerate untracked files. 'status -uno'
may speed it up, but you have to be careful not to forget to add
new files yourself (see 'git help status').
nothing to commit, working tree clean
git status  9.10s user 286.67s system 323% cpu 1:31.38 total

2回目以降にscalarが様々な高速化の処理を裏でしてくれているため、かなり高速になります。どういう事がおこなわれているかは、下部の参照元を参考にしていただくと幸いです。ざっくりと説明するとファイルシステムのモニタリングやindexの生成やバックグラウンドで色々とメンテナンスの処理を実施してくれています。

$ time git status
On branch main
Your branch and 'origin/main' refer to different commits.
  (use "git status --ahead-behind" for details)

nothing to commit, working tree clean
git status  0.88s user 0.79s system 153% cpu 1.086 total

なんと、約37秒かかっていたgit statusが約1秒になりました。

まとめ

今回は大規模Gitリポジトリを高速化するGit 2.38から同梱されたscalarを紹介しました。

今回はgit statusで検証してますが、git fetchなども爆速になるので、ぜひ利用していきましょう。

Gitの本来の性能を発揮するためには、適切に設定していく必要があるのが現状です。

参照

タイトルとURLをコピーしました