scalar
Scalar: A set of tools and extensions for Git to allow very large monorepos to run on Git without a virtualization layer
Top Related Projects
A fork of Git containing Windows-specific patches.
A cross-platform, linkable library implementation of Git that you can use in your application.
Git Extensions is a standalone UI tool for managing git repositories. It also integrates with Windows Explorer and Microsoft Visual Studio (2015/2017/2019).
simple terminal UI for git commands
A pure JavaScript implementation of git for node and browsers!
A highly extensible Git implementation in pure Go.
Quick Overview
Scalar is an open-source project by Microsoft that aims to improve Git performance for large repositories. It focuses on optimizing Git operations for monorepos and other large-scale projects, addressing common challenges faced by developers working with extensive codebases.
Pros
- Significantly improves Git performance for large repositories
- Seamlessly integrates with existing Git workflows and tools
- Reduces disk space usage through intelligent file management
- Supports both Windows and macOS platforms
Cons
- Limited support for Linux (currently in development)
- May require additional setup and configuration compared to standard Git
- Some advanced Git features might not be fully supported or optimized
- Learning curve for teams transitioning from traditional Git workflows
Getting Started
To get started with Scalar, follow these steps:
-
Install Scalar:
winget install --id Microsoft.Scalar
-
Clone a repository using Scalar:
scalar clone <repository-url> <local-path>
-
Use Git commands as usual within the Scalar-managed repository:
cd <local-path> git status git pull git commit -m "Your commit message" git push
For more detailed instructions and advanced usage, refer to the official Scalar documentation.
Competitor Comparisons
A fork of Git containing Windows-specific patches.
Pros of Git for Windows
- Widely adopted and well-established Git implementation for Windows
- Includes a full suite of Git tools and utilities
- Supports both command-line and GUI interfaces
Cons of Git for Windows
- Can be slower for large repositories or complex operations
- May require more manual configuration for optimal performance
- Limited built-in support for handling extremely large files
Code Comparison
Git for Windows:
git clone https://github.com/example/repo.git
cd repo
git checkout -b new-feature
git add .
git commit -m "Add new feature"
Scalar:
scalar clone https://github.com/example/repo.git
cd repo
git checkout -b new-feature
git add .
git commit -m "Add new feature"
Key Differences
- Scalar focuses on improving performance for large repositories
- Git for Windows provides a more traditional Git experience
- Scalar integrates with existing Git workflows but optimizes certain operations
Use Cases
- Git for Windows: Suitable for most Windows users and general Git operations
- Scalar: Ideal for large monorepos or projects with extensive history
Performance
- Scalar generally offers better performance for large repositories
- Git for Windows may require additional configuration for optimal performance in large projects
A cross-platform, linkable library implementation of Git that you can use in your application.
Pros of libgit2
- Mature and widely-used library with extensive language bindings
- Highly performant and memory-efficient implementation
- Flexible API allowing fine-grained control over Git operations
Cons of libgit2
- Requires more low-level knowledge of Git internals
- Less focus on large repository performance optimizations
- May require additional work to implement high-level Git workflows
Code Comparison
Scalar (C#):
using Microsoft.Git.CredentialManager;
using Scalar.Commands;
var credentialManager = new CredentialManager();
var cloneCommand = new CloneCommand(credentialManager);
cloneCommand.Execute(repoUrl, localPath);
libgit2 (C):
#include <git2.h>
git_repository *repo = NULL;
git_clone_options clone_opts = GIT_CLONE_OPTIONS_INIT;
int error = git_clone(&repo, url, local_path, &clone_opts);
git_repository_free(repo);
Summary
Scalar focuses on optimizing Git for large repositories, offering improved performance for specific scenarios. libgit2 provides a more general-purpose Git implementation with broader language support and flexibility. Scalar may be preferable for large-scale projects, while libgit2 is suitable for a wide range of Git-related applications and custom Git tooling.
Git Extensions is a standalone UI tool for managing git repositories. It also integrates with Windows Explorer and Microsoft Visual Studio (2015/2017/2019).
Pros of Git Extensions
- User-friendly GUI for Git operations, making it accessible for beginners
- Extensive feature set, including visual diff tools and repository management
- Cross-platform support (Windows, macOS, Linux)
Cons of Git Extensions
- Larger installation footprint compared to Scalar's lightweight approach
- May have a steeper learning curve for users new to Git concepts
- Performance might be slower for very large repositories
Code Comparison
Git Extensions (C#):
public class GitCommands
{
public static string Init(string path)
{
return RunGitCmd("init", path);
}
}
Scalar (C++):
int Scalar::Init(const char* enlistment_root)
{
return RunGitCommand("init", enlistment_root);
}
While both projects interact with Git, Git Extensions focuses on providing a comprehensive GUI wrapper, whereas Scalar aims to optimize Git for large repositories through its Virtual File System (VFS) approach. Git Extensions offers more visual tools and a broader feature set, while Scalar prioritizes performance and efficiency for specific use cases involving massive codebases.
simple terminal UI for git commands
Pros of Lazygit
- User-friendly terminal UI for Git operations
- Supports multiple platforms (Linux, macOS, Windows)
- Actively maintained with frequent updates
Cons of Lazygit
- Limited to Git operations, not optimized for large repositories
- May require learning new keyboard shortcuts
Code Comparison
Lazygit (Go):
func (gui *Gui) handleCommitConfirm(g *gocui.Gui, v *gocui.View) error {
message := gui.trimmedContent(v)
if message == "" {
return gui.createErrorPanel(gui.Tr.NoCommitMessageErr)
}
return gui.handleCommitSubmit(message)
}
Scalar (C#):
public static void Main(string[] args)
{
try
{
ReturnCode returnCode = Program.Execute(args);
Environment.Exit((int)returnCode);
}
catch (Exception e)
{
Console.Error.WriteLine(e.ToString());
Environment.Exit((int)ReturnCode.GenericError);
}
}
Summary
Lazygit is a terminal-based Git client focusing on user-friendly interactions, while Scalar is designed to optimize Git for large repositories. Lazygit offers a more intuitive interface for common Git operations, but may not be as efficient for massive codebases. Scalar, on the other hand, excels in handling large repositories but lacks the user-friendly terminal UI of Lazygit. The choice between the two depends on the specific needs of the project and the user's preferences.
A pure JavaScript implementation of git for node and browsers!
Pros of isomorphic-git
- Platform-independent: Works in browsers, Node.js, and other JavaScript environments
- Pure JavaScript implementation: No native dependencies required
- Extensive API: Supports a wide range of Git operations
Cons of isomorphic-git
- Performance: May be slower for large repositories compared to native Git implementations
- Limited support for some advanced Git features
- Larger bundle size due to pure JavaScript implementation
Code Comparison
isomorphic-git:
import { clone } from 'isomorphic-git'
import http from 'isomorphic-git/http/web'
await clone({
fs,
http,
dir: '/path/to/repo',
url: 'https://github.com/example/repo.git'
})
Scalar:
using Microsoft.Git.CredentialManager;
var credentialManager = new CredentialManager();
var credentials = await credentialManager.GetCredentialsAsync(remoteUrl);
ScalarClone.Run(sourceUrl, targetPath, credentials);
Key Differences
- Language: isomorphic-git is JavaScript-based, while Scalar is primarily C#
- Focus: isomorphic-git aims for cross-platform JavaScript Git operations, Scalar focuses on large repository performance
- Integration: isomorphic-git is easily integrated into web applications, Scalar is more suited for desktop environments
- Performance: Scalar is optimized for large repositories, while isomorphic-git may struggle with very large repos
A highly extensible Git implementation in pure Go.
Pros of go-git
- Pure Go implementation, offering better portability and easier integration in Go projects
- Supports a wide range of Git operations, including clone, push, pull, and branch management
- Active development with frequent updates and contributions from the community
Cons of go-git
- May have slower performance for large repositories compared to native Git implementations
- Limited support for some advanced Git features and protocols
- Potential compatibility issues with certain Git workflows or edge cases
Code Comparison
go-git:
r, err := git.PlainClone("/path/to/repo", false, &git.CloneOptions{
URL: "https://github.com/go-git/go-git",
Progress: os.Stdout,
})
Scalar:
var enlistment = await Scalar.EnlistmentFactory.CreateNewEnlistmentAsync(
"https://github.com/microsoft/scalar",
"/path/to/repo",
new ScalarVerbController());
Summary
go-git is a pure Go implementation of Git, offering portability and easy integration for Go projects. It supports a wide range of Git operations but may have performance limitations for large repositories. Scalar, on the other hand, is focused on improving Git performance for large repositories and is more tightly integrated with the native Git implementation. The choice between the two depends on specific project requirements, language preferences, and performance needs.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual CopilotREADME
What is Scalar?
Scalar is a tool that helps Git scale to some of the largest Git repositories. It achieves this by enabling some advanced Git features, such as:
-
Partial clone: reduces time to get a working repository by not downloading all Git objects right away.
-
Background prefetch: downloads Git object data from all remotes every hour, reducing the amount of time for foreground
git fetch
calls. -
Sparse-checkout: limits the size of your working directory.
-
File system monitor: tracks the recently modified files and eliminates the need for Git to scan the entire worktree.
-
Commit-graph: accelerates commit walks and reachability calculations, speeding up commands like
git log
. -
Multi-pack-index: enables fast object lookups across many pack-files.
-
Incremental repack: Repacks the packed Git data into fewer pack-file without disrupting concurrent commands by using the multi-pack-index.
As new versions of Git are released, we update the list of features that Scalar automatically configures. This reduces your effort to keep your repositories as efficient as possible.
Scalar has moved!
Through significant effort from our team, we have successfully transitioned
Scalar from a modified version of VFS for Git into a thin shell
around core Git features. The Scalar executable has now been ported to be
included in the microsoft/git
fork. Please visit that
fork for all of your Scalar needs:
- Download the latest
microsoft/git
release. - Read the Scalar documentation.
- Contribute changes to the
scalar
CLI.
Why did Scalar move?
Scalar started as a modification of VFS for Git to
create a working solution with a robust test suite in a short amount of
time. The goal was to depend more on features that exist within Git itself
instead of creating new functionality within this project. Since the start,
we have focused on this goal with efforts such as
improving sparse-checkout performance in Git,
implementing background maintenance in Git,
and integrating the GVFS protocol into microsoft/git
which allowed us to drop the Scalar.Mount
process.
All of these changes reduced the size of the code in Scalar itself until
it could be replaced with a small command-line interface.
Additional benefits to this change include making our release and installation mechanism much simpler. Users now only need to install one tool, not multiple, to take advantage of all of the benefits.
What remains in this repository?
We are keeping the microsoft/scalar
repository available since we have
linked to it and want to make sure those links continue to work. We
added pointers in several places to navigate readers to the microsoft/git
repository for the latest versions.
We also have a large set of functional tests that verify that Scalar
enlistments continue to work in a variety of advanced Git scenarios. These
tests are incredibly helpful as we advance features in microsoft/git
, so
those tests remain in this repository. We run them as part of pull request
validation in microsoft/git
, so no changes are made there without passing
this suite of tests.
What if I already installed Scalar and want the new version?
We are working to ensure that users on the .NET version of Scalar have a painless experience while changing to the new version.
-
On Windows, users can install
microsoft/git
and the installer will remove the .NET version and update any registered enlistments to work with the new version. -
On macOS, users should run
brew uninstall --cask scalar
orbrew uninstall --cask scalar-azrepos
depending on their version and then runbrew install --cask microsoft-git
to get the new version. At the moment, users on macOS will need to re-runscalar register
on their enlistments to ensure they are registered for future upgrades. -
On Linux, there is no established uninstall mechanism, but the .NET version can be removed via
sudo rm -rf /usr/local/lib/scalar/
. Installing the new version will overwrite thescalar
binary in/usr/local/bin
. At the moment, users on Linux will need to re-runscalar register
on their enlistments to ensure they are registered for future upgrades.
You can check if the new Scalar version is installed correctly by running
scalar version
which should have the same output as git version
.
License
The Scalar source code in this repo is available under the MIT license. See License.md.
Code of Conduct
This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact opencode@microsoft.com with any additional questions or comments.
Top Related Projects
A fork of Git containing Windows-specific patches.
A cross-platform, linkable library implementation of Git that you can use in your application.
Git Extensions is a standalone UI tool for managing git repositories. It also integrates with Windows Explorer and Microsoft Visual Studio (2015/2017/2019).
simple terminal UI for git commands
A pure JavaScript implementation of git for node and browsers!
A highly extensible Git implementation in pure Go.
Convert
designs to code with AI
Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.
Try Visual Copilot