...
This is the approach you want to use. The risk is that you do
not allow objects to be added to main.git to later be deleted from
main.git. This means main.git cannot rewind/reset/delete a branch.
If that is not acceptable perhaps you could instead create 3 tiers:
main.git ---
\
shared.git
/
subx.git ---
Have main.git and subx.git both use shared.git as an alternate
(place path of shared.git/objects in their objects/info/alternates).
You can still allow subx.git to fetch main.git.
Push only stable commits to shared.git that will never be
rewind/reset/deleted. Once something enters shared.git it should
never be deleted. This way shared objects will not be removed by
git-prune or git-gc. Every so often push newer stable branches from
main.git to shared.git, once they cannot be rewind/reset/deleted.
Repack main.git and subx.git using `git gc` as that includes the
-l flag to `git repack`. Any objects which are now available from
shared.git will not be included in main.git or subx.git, so their
usage will shrink after shared.git is updated.
If you also configure gc.packrefs to never in shared.git and
symlink shared.git/refs into main.git/refs/shared and also into
subx.git/refs/shared and do this configuration on both server and
client systems you can have everyone transfer only the minimal
objects necessary.
I use basically that arrangement at day-job to avoid 7 copies of
roughly 150 MB of shared history across 8 repositories. This
reduces the amount of data the OS needs to store in buffer cache
by nearly 1050 MB and thus makes things run rather quickly. (Yes,
many operations hit all 8 repositories in rather rapid succession,
its a submodule sort of arrangement.)
--
Shawn.
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html