On Tue, Jul 17, 2018 at 2:48 AM Ævar Arnfjörð Bjarmason <avarab@xxxxxxxxx> wrote: > > > On Tue, Jul 17 2018, J. Paul Reed wrote: > > > Hey Git Devs, > > > > I have a bit of an odd question: do git clone/checkout operations have a > > deterministic ordering? > > > > That is: are files guaranteed to be laid down onto disk in any specific > > (and deterministic) order as a clone and/or checkout operations occurs? > > (And if so, is it alphabetical order? Depth-first? Something else?) > > > > In case the answer is different (and I'd guess that it might be?), I'm > > mostly interested in the initial clone case... but it would be great to > > know if, indeed, the answer is different for just-checkouts too. > > > > I did some cursory googling, but nothing hopped out at me as an answer to > > this question. > > In practice I think clone, checkout, reset etc. always work in the same > order you see with `git ls-tree -r --name-only HEAD`, but as far as I > know this has never been guaranteed or documented, and shouldn't be > relied on. The transmission of packfiles is non-deterministic, as the packfiles (which are packed for each clone separately when using core git as a server) are not packed in a deterministic fashion, but in a threaded environment which allows different packing orders. If you clone from a server that gives you exactly the same pack at all times (assuming the remote repo doesn't change refs), then checkout is currently deterministic in unpacking files to the working tree. > > E.g. there's probably cases where writing files in parallel is going to > be faster than writing them sequentially. We don't have such a mode just > because nobody's written a patch for it, but having that patch would > break any assumptions of our current order. +cc Ben who is looking into that, but hasn't spoken up on the mailing list yet.