refs/replace advice
- From
- Pete Wyckoff <pw@padd.com>
- Date
- Jul 29, 2011, 15:31 UTC
- Message-ID
- <20110729153122.GA4535@padd.com>
I've got two near-identical git repos, both imported from gigantic upstream p4 repos. They started at slightly different times so have different commit SHA1s, even though the tree contents are the same. I can't filter-branch either of them; too many users already.
I'm trying to use "git replace" to avoid cloning the entire set of duplicate commits across a slow inter-site link. Like this:
...---A----B----C site1/top
\
D---E---F site1/proj...---A'---B'---C' site2/top
It is true that "git diff C C'" is empty: they are identical.
This set of commands, run from site2, clones most of the repo locally (up to C'), then grabs the few changes D..F from the faraway site1:
git clone /path/to/site2.git repo
cd repo
git remote add -f site1 /path/to/faraway/site1.gitBut it causes an entire fetch of all commits because C != C'. I'd prefer it just to fetch D, E and F. So I try:
git refs replace A' A
but it still fetches everything. I toyed with grafting site1's A on top of the parent of our local A':
echo A A'^ > .git/info/grafts
no luck.
I thought maybe I could "git fetch --depth=N" where N would cover the range A'..site2/top, then replace. But testing with "git fetch --depth=3" still wants to fetch 100k objects.
Any ideas?
-- Pete