With --filter=blob:none Git keeps the full commit history but downloads file contents only when needed, from a promisor remote that allows filters. Offline, a missing blob is an error. Often combined with sparse checkout.