updated faq/readme again · Entire
updated faq/readme again
1b676c0→main·
Soph·2mo ago·1 file·+8 added/-5
Sessions
65651c113574View transcript
[?
can you review the faq changes in this branch, can you look at them as an engineer being familiar with general usage of git and how repositories workCodex·GPT-5.4·1 step](/content/gh/entireio/git-sync/session/019ddda4-e5fe-7d62-bd1f-f28b89eb8f99#timeline-65651c113574/index.html)
Changes
1
- MREADME.md+8/-5
103 unmodified lines
104
105
106
107
107
108
109
110
111
112
113
114
115
111
116
117
113
114
115
118
119
120
121
103 unmodified lines
How does it scale?
The scalable path streams pack data from the source directly into the target without materializing the full object graph locally. The in-memory go-git store is used for planning, ancestry checks, and fallback materialized pushes. In fallback mode, git-sync fetches objects into memory, computes what must be pushed, then encodes and sends a pack to the target.git-sync has two transfer paths:
- Relay — pack data streams from source
upload-packdirectly into targetreceive-pack. The local process holds no object graph, so memory stays bounded regardless of repo size. Used when the target supports relay. - Materialized fallback — when relay isn't available,
git-syncfetches the needed objects into an in-memorygo-gitstore, plans, then encodes and pushes a packfile. Memory scales with the diff being pushed and is guarded by an explicit object-count limit. Bootstrap can batch large initial syncs to keep this bounded.
Planning itself is cheap: ref-only round-trips, plus a filter tree:0 fetch for ancestry checks when the source advertises filter support.
How long does it take for a medium-sized repo?
There is no fixed runtime. It depends on repository size, pack size, network latency, provider speed, and whether relay is used. On the relay path, time is mostly source pack generation plus network transfer plus target receive time.
It depends on repository size, network speed, and whether the relay path is available. As a rule of thumb, the relay path is bounded by source pack generation + network transfer + target receive-pack time — roughly the time of a git clone from the source plus a git push of the same pack. The materialized fallback adds local memory work for objects that need inspection.
How does it deal with partial successes? Is it atomic?
git-sync plans before pushing and blocks unsafe refs before starting. A single target receive-pack push is atomic in the normal Git sense for that push. Across multiple batches or separate push requests, especially batched bootstrap, it is not globally atomic; batched bootstrap uses temporary refs and resume behavior.
For concrete numbers on your own setup, run the included benchmark tool against a representative repo; see docs/testing.md.