this works: git ls-remote /path/to/repo2/ git ls-remote /path/to/repo2/.git/ git ls-remote file:///path/to/repo2/ git ls-remote file:///path/to/repo2/.git/ this fails: python -m http.server -d /path/to/repo2/ & git ls-remote http://localhost:8000/ git ls-remote http://localhost:8000/.git/ workaround: pushd /path/to/repo2/.git/ git --bare update-server-info mv hooks/post-update.sample hooks/post-update popd git ls-remote http://localhost:8000/ expected: dumb http remotes should behave like file remotes > git --bare update-server-info that command creates the file /path/to/repo2/.git/info/refs but that is just an optimization for http servers with high latency my "dumb" http server is smart enough to handle http range requests so there is no need to download all the files from .git/ but also without http range requests this should "just work" and the user should be responsible for optimizations as another workaround i tried to mount the .git/ directory with httpdirfs but httpdirfs fails to mount git repos, see https://github.com/fangfufu/httpdirfs/issues/183 related: https://stackoverflow.com/questions/2085402/what-does-git-update-server-info-do https://stackoverflow.com/questions/2278888/private-git-repository-over-http