Is your feature request related to a problem? Please describe.
# Cloning a large repository is incredibly slow
builtins.fetchGit {
url = "git@github.com:bergkvist/private-repo";
ref = "refs/tags/v1.2.3";
}
When working with private git repos that need to be accessed over ssh, builtins.fetchGit is currently the most convenient alternative since it uses local git config - however it is incredibly slow. On a private repo I'm working with that is ~1GB in size, it takes more than an hour to run, and doesn't display any progress like git clone does. On the other hand, fetchTarball is significantly faster, but only works over http/doesn't work through ssh/git with local config/yubikey-setup.
Describe the solution you'd like
Git supports an archive command, which is ~100x faster than builtins.fetchGit in my case (20s vs 1h). A downside is that this doesn't work with submodules.
# Example usage
git archive --format=tar.gz --remote=git@github.com:bergkvist/private-repo v1.2.3 > private-repo-v1.2.3.tar.gz
builtins.fetchGitArchive {
remote = "git@github.com:bergkvist/private-repo";
format = "tar.gz";
version = "v1.2.3";
sha256 = "..."; # if not included, use the tarball-ttl
}
Is your feature request related to a problem? Please describe.
When working with private git repos that need to be accessed over ssh,
builtins.fetchGitis currently the most convenient alternative since it uses local git config - however it is incredibly slow. On a private repo I'm working with that is ~1GB in size, it takes more than an hour to run, and doesn't display any progress likegit clonedoes. On the other hand,fetchTarballis significantly faster, but only works over http/doesn't work through ssh/git with local config/yubikey-setup.Describe the solution you'd like
Git supports an archive command, which is ~100x faster than
builtins.fetchGitin my case (20s vs 1h). A downside is that this doesn't work with submodules.