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é