Scalar は、大規模なリポジトリで使用するために Git を最適化するリポジトリ管理ツールです。 ユーザーが Git で高い性能の機能を利用できるようにすることで、 これを実現します。 他のほとんどの Git 組み込みコマンドとは異なり、 Scalar は git のサブコマンドとして実行されず、 独自の一連のサブコマンドを含む個別の実行可能ファイルとしてビルドされます。

Background

Scalar はもともと Git のアドオンとして設計され、 .NET Core アプリケーションとして実装されました。 これは(大規模なリポジトリでの作業経験を向上させることを目的とした別のアプリケーションである) VFS for Git プロジェクトから得た教訓に基づいて作成されました。 Scalar の初期の実装の一部は Git の Microsoftフォークにあるカスタム機能に依存していましたが、これはその後 core Git に統合されました:

  • partial clone,

  • commit graphs,

  • multi-pack index,

  • sparse checkout (cone mode),

  • scheduled background maintenance,

上記のとおり、 必要な Git 機能が整っていて、 Scalar の利点を、 より大きな Git コミュニティにもたらしたいという要望により、 Scalar アプリケーション自体が C# から C に移植され、 アップストリームに統合されました。

Features

Scalar は、 組み込みの Git コマンドのパフォーマンス機能(built-in Git performance features)の自動構成と、 リポジトリの enlistment の管理、 という 2 つの主要な機能で構成されています。

Scalar によって構成された Git パフォーマンス機能 (例については「Background」参照)は、 大規模なリポジトリに実質的なパフォーマンス上の利点をもたらしますが、 実験的すぎてまだすべての Git を有効にできないか、 大規模なリポジトリにのみ利点があります。 新しい機能が導入されたら、 それに応じて Scalar を更新してそれらを組み込む必要があります。 これにより、 ツールが古くなるのを防ぎながら、 適切なユーザーに機能をより簡単に提供するための道筋を提供します。

enlistment は、 ユーザーのシステム上のどのリポジトリが Scalar 構成の機能を利用する必要があるかを Scalar が認識する方法です。 これにより、 ツールに新しい設定が追加されたときにパフォーマンス設定を更新したり、 リポジトリのメンテナンスを集中管理したりできます。 enlistment 構造 (クローンされたリポジトリ自体を含む src/ サブディレクトリを持つルート・ディレクトリ) は、Git でこれらのファイルを無視することによるパフォーマンス制限のオーバーヘッドを回避するために、 ビルド出力をリポジトリの外に采配(route)することをユーザーに奨励するように設計されています。

Design

Scalar は C で実装され、 Git の子プロセス呼び出しと libgit.a の直接使用の組み合わせで Git と対話します。 内部的には、 サブコマンド (例: git stash ) を持つ他のビルトインと同様に構造化されており、 cmd_main() 関数を介して采配(routed)される各サブコマンドの cmd_<subcommand>() 関数が含まれています。 ほとんどのオプションは各サブコマンドに固有であり、 scalar は一部の「グローバル」な git オプション(-c-C など)を尊重します。

scalar は (git scalar のように) Git サブコマンドとして呼び出されないため、 gitgit-gui などと一緒に bin/ ディレクトリに独自の実行可能ファイルとしてビルドおよびインストールされます。