git/list[1] front-page[2] threads[3] people[4] search[5] about
 

mirror git repos: rsync vs. --mirror

From
Robin H. Johnson <robbat2@gentoo.org>
Date
Mar 30, 2010, 20:54 UTC
Message-ID
<robbat2-20100330T205331-531407911Z@orbis-terrarum.net>

I'm trying to see about the state of automated mirroring git repositories between different systems, eg. a private backend and a public frontend, and ran into a catch between two possible options, each with a downside. If there are other means besides these, I'm all ears for them.

rsync:
------
How:
- Simply rsync the git repository, atomically, and use --delete-after.
Benefits:
- Guaranteed to match between master/slaves.
Caveats:
- Need to know that the master repo is in a good state.
- If a repo is repacked, there is a lot more traffic in the next sync.
git clone --mirror && git fetch:
--------------------------------
How:
- Setup with: "git clone --mirror URL"
- Cronjob with: "git fetch"
Benefits:
- Extremely fast
- Light on traffic
Caveats:
- Branches and tags deleted in master persist in slaves :-(
- Seperate gc/repack needed on slaves.

The traffic vs. deleted branches/tags is the main tradeoff here, esp. as repos get larger.

Can git-fetch perhaps be made to delete the branches/tags?
-- 
Robin Hugh Johnson
Gentoo Linux: Developer, Trustee & Infrastructure Lead
E-Mail     : robbat2@gentoo.org
GnuPG FP   : 11AC BA4F 4778 E3F6 E4ED  F38E B27B 944E 3488 4E85
Next: Julian Phillips
Message 1 of 4 in “mirror git repos: rsync vs. --mirror”
  1. Robin H. JohnsonMar 30, 2010
  2. Julian PhillipsMar 30, 2010
  3. Sitaram ChamartyMar 31, 2010
  4. Robin H. JohnsonMar 31, 2010

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.