Slow fetch on repo with tags per each commit (à la Vim)
From: Bagas Sanjaya <hidden>
Date: 2021-05-31 06:36:14
Hi, I have full clone of Vim repository [1] on my computer. This repo has tags for each commit, meaning that when there is a new commit landed on default (master) branch, it will be tagged (something close to release tags but not same). While on the other repo, doing git fetch will fetch new commits from the remote quickly (the only limit is network bandwidth), on vim repo it takes longer. Examining the trace (run by `GIT_TRACE=1 git fetch`), I got:
13:21:50.429633 git.c:447 trace: built-in: git fetch 13:21:50.470410 run-command.c:667 trace: run_command: GIT_DIR=.git git remote-https origin https://github.com/vim/vim.git 13:21:50.492785 git.c:733 trace: exec: git-remote-https origin https://github.com/vim/vim.git 13:21:50.492849 run-command.c:667 trace: run_command: git-remote-https origin https://github.com/vim/vim.git remote: Enumerating objects: 137, done. remote: Counting objects: 100% (137/137), done. remote: Compressing objects: 100% (20/20), done. 13:23:31.589963 run-command.c:667 trace: run_command: git index-pack --stdin -v --fix-thin '--keep=fetch-pack 10745 on ubuntu' --pack_header=2,137 13:23:31.593505 git.c:447 trace: built-in: git index-pack --stdin -v --fix-thin '--keep=fetch-pack 10745 on ubuntu' --pack_header=2,137 remote: Total 137 (delta 116), reused 134 (delta 113), pack-reused 0 Receiving objects: 100% (137/137), 117.44 KiB | 871.00 KiB/s, done. Resolving deltas: 100% (116/116), completed with 101 local objects. 13:23:32.682368 run-command.c:667 trace: run_command: git rev-list --objects --stdin --not --all --quiet --alternate-refs 13:23:32.684986 git.c:447 trace: built-in: git rev-list --objects --stdin --not --all --quiet --alternate-refs From https://github.com/vim/vim 0b4964848..2fa9384ca master -> origin/master * [new tag] v8.2.2914 -> v8.2.2914 13:23:33.239629 run-command.c:667 trace: run_command: GIT_DIR=.git git remote-https origin https://github.com/vim/vim.git 13:23:33.241760 git.c:733 trace: exec: git-remote-https origin https://github.com/vim/vim.git 13:23:33.241815 run-command.c:667 trace: run_command: git-remote-https origin https://github.com/vim/vim.git 13:23:33.251931 run-command.c:667 trace: run_command: git rev-list --objects --stdin --not --all --quiet --alternate-refs 13:23:33.540444 run-command.c:667 trace: run_command: git rev-list --objects --stdin --not --all --quiet --alternate-refs 13:23:33.542831 git.c:447 trace: built-in: git rev-list --objects --stdin --not --all --quiet --alternate-refs * [new tag] v8.2.2911 -> v8.2.2911 * [new tag] v8.2.2912 -> v8.2.2912 * [new tag] v8.2.2913 -> v8.2.2913 13:23:33.828590 run-command.c:1628 run_processes_parallel: preparing to run up to 1 tasks 13:23:33.828702 run-command.c:1660 run_processes_parallel: done 13:23:33.829024 run-command.c:667 trace: run_command: git maintenance run --auto --no-quiet 13:23:33.831040 git.c:447 trace: built-in: git maintenance run --auto --no-quiet 1.80user 1.89system 1:43.54elapsed 3%CPU (0avgtext+0avgdata 25700maxresident)k 149520inputs+4552outputs (268major+20701minor)pagefaults 0swaps
git fetch took about 100 seconds to complete, including fetching 3 new tags. On the other repo, the same command took around 10-20 seconds, depending on how large data that must be downloaded. Note that Vim repo has 13952 commits and 12284 tags; and for testing above I use Git 2.31.1. Thanks. [1]: https://github.com/vim/vim -- An old man doll... just what I always wanted! - Clara