Я хотел бы получить файл при фиксации из удаленного репозитория git без извлечения всех объектов в репозитории. Я знаю, что git archive
не работает, так как он может только получить кончик ветви.
С помощью sparse-checkout и использования протокола v2 (спасибо @ bk2204) я могу создать рабочее дерево только с файлом readme. при коммите, но git передает 10 с тысяч объектов и 188 МБ.
mkdir linux
cd linux
git init
git config core.sparseCheckout true
git config protocol.version 2
git remote add origin git@github.com:torvalds/linux.git
echo "/README" > .git/info/sparse-checkout
git fetch --depth 1 origin ab02b61f24c76b1659086fcc8b00cbeeb6e95ac7
git checkout ab02b61f24c76b1659086fcc8b00cbeeb6e95ac7
remote: Enumerating objects: 71432, done.
remote: Counting objects: 100% (71432/71432), done.
remote: Compressing objects: 100% (66651/66651), done.
remote: Total 71432 (delta 5277), reused 25451 (delta 3920), pack-reused 0
Receiving objects: 100% (71432/71432), 188.85 MiB | 7.71 MiB/s, done.
Resolving deltas: 100% (5277/5277), done.
В идеале эта операция должна получить 3 объекта - коммит (известный sha)> дерево коммита> файл в дереве
$ git cat-file -p ab02b61f24c76b1659086fcc8b00cbeeb6e95ac7 | grep tree
tree f6760b0bf32bd3b9a760d6e895c7fb76cd9c2ef8
$ git cat-file -p f6760b0bf32bd3b9a760d6e895c7fb76cd9c2ef8 | grep README
100644 blob 669ac7c32292798644b21dbb5a0dc657125f444d README
$ git cat-file -p 669ac7c32292798644b21dbb5a0dc657125f444d