Clone Time Calculator
Estimate how long a full or shallow git clone will take given repository size and available network bandwidth.
Inputs
Total transferable size of the repository (.git + relevant objects).
Network throughput available to the client doing the clone.
Enable if using `git clone --depth N` to fetch only recent history.
Percent of full repository size a shallow clone actually transfers.
Estimated Clone Time
40ms
Data Transferred
500.0MB
Time Saved vs Full Clone
0ms
Full Clone Time (Reference)
40ms
Step by step
Bandwidth in MB/s
100Mbps / 8
= 12.50MB/s
Transfer size
500MB (full)
= 500.0MB
Clone time: size / bandwidth
500.0MB / 12.50MB/s
= 40.0s
How it works
Clone time is primarily bound by how much data must transfer over the network. Formula: time = repo_size / bandwidth. A shallow clone (`--depth N`) only fetches the specified number of recent commits and their objects, so it transfers a fraction of the full history — the calculator models this as transfer_size = repo_size × shallow_fraction, divided by bandwidth to get time.
Formula
clone_time_sec = transfer_size_MB / (bandwidth_Mbps / 8)
- transfer_size_MB
- Data transferred (full size or repo × shallow_fraction)
- bandwidth_Mbps
- Available network bandwidth in Mbps
Frequently Asked Questions
Why is my clone slower than this estimate?
This model assumes sustained line-rate throughput. Real clones are also bound by server-side pack generation (CPU), TLS handshake overhead for many small requests, and network latency/packet loss — especially over long geographic distances.
How much does a shallow clone actually save?
It depends entirely on repository history depth. For a repo with years of history, `--depth 1` can transfer 5-20% of the full size; for a young repo with little history, savings are minimal.
Does `--filter=blob:none` help more than shallow clone?
Yes for many workflows — a treeless/blobless partial clone fetches full commit history (small) but defers blob downloads until checkout, which can be smaller than even a shallow clone if you only need recent file content.
Can I convert a shallow clone to a full clone later?
Yes, run `git fetch --unshallow` to backfill the missing history, though this transfers the remaining objects and takes time proportional to that remaining size.