Hi,
I was wondering why "git clone" seems to not respect "-delta" in .gitattributes.
*Reproduction*
I prepared a test repository with:
- git v2.17.1 - .gitattributes containing "*.bin binary -delta" - 10 commits with a 10 MB random binary file
Code: --------------------------------------------------------------------- #!/bin/bash
# setup repository git init --quiet repo cd repo
echo '*.bin binary -delta' > .gitattributes git add .gitattributes git commit --quiet -m 'attributes'
for i in $(seq 10); do
dd if=/dev/urandom of=data.bin bs=1MB count=10 status=none
git add data.bin
git commit --quiet -m "data $i"
done
cd ..# create clone repository time git clone --no-local repo clone
# repack original repository cd repo time git repack -a -d ---------------------------------------------------------------------
Output: --------------------------------------------------------------------- Cloning into 'clone'... remote: Counting objects: 33, done. remote: Compressing objects: 100% (31/31), done. remote: Total 33 (delta 0), reused 0 (delta 0) Receiving objects: 100% (33/33), 95.40 MiB | 19.94 MiB/s, done.
real 0m25,085s user 0m22,749s sys 0m0,948s
Counting objects: 33, done. Delta compression using up to 2 threads. Compressing objects: 100% (21/21), done. Writing objects: 100% (33/33), done. Total 33 (delta 0), reused 0 (delta 0)
real 0m5,652s user 0m4,173s sys 0m0,178s ---------------------------------------------------------------------
*Observations*
_time_
- Cloning: "clone" takes always 25s - Optimizing: "repack" takes 25s with and 5s without delta compression
_compressed objects_
- Cloning: "clone" compresses always 31 objects - Optimizing: "repack" compresses 31 objects with and 21 objects without delta compression
*Expectations*
Both operations ("repack" and "clone") are using "pack-objects".Therefore my expectation is that "clone" should respect "-delta" and be about as fast as "repack".
Cheers, René