GitOnSharedHost
Created Friday 02 December 2022
Recently I set up read-only Git repository hosting on Dreamhost for my project JACL. This was kind of tricky, so here are the steps:
- In the Dreamhost control panel, set up SSH for a user.
- Once you can log in with a password, you probably want to set up key-based authentication.
- On the remote host,
cdinto the directory corresponding to your hosted domain. mkdir your-repo.gitcd your-repo.gitgit init --barecp hooks/post-update.sample hooks/post-update- Back in your local repo, run a command like the following:
git remote add origin ssh://user@northbend.dreamhost.com:/home/user/example.com/your-repo.gitsubstitutinguser,northbend.dreamhost.com, andexample.comwith your particulars. git push -u origin master- Now, you should be able to
git pushand anyone on the Internet should be able togit clone https://example.com/your-repo.git
Cloning or fetch failures on shared hosts
On shared hosting, git clone or git fetch over SSH can fail with errors like:
fatal: unable to create thread: Resource temporarily unavailablegit upload-pack: git-pack-objects died with errorfatal: early EOF- misleading messages about possible repository corruption
These errors are misleading. The repository is usually fine. The real issue is strict process and thread limits on shared hosting. When Git tries to pack objects with multiple threads, git pack-objects can exceed those limits and die.
Force single-threaded packing on the server:
git config --global pack.threads 1
Optional conservative memory limits that are often needed on shared hosts:
git config --global pack.windowMemory 10m
git config --global pack.packSizeLimit 50m
These settings are safe defaults for shared hosts and avoid the thread limit failures.
If SSH cloning still fails, fall back to:
- Shallow clones (
git clone --depth 1) git bundleto transfer repositories when SSH cloning is unreliable