Hi, On Sun, 29 Jan 2006, Junio C Hamano wrote: > Strategy > -------- > > We have `info/grafts` mechanism to fake parent information for > commit objects. Using this facility, we could roughly do: > > . Download the full tree for v2.6.14 commit and store its > objects locally. On first read, I mistook "tree" for "commit"... > . Set up `info/grafts` to lie to the local git that Linux kernel > history began at v2.6.14 version. Maybe also record this in .git/config, so that you can - disallow fetching from this repo, and - easily extend the shallow copy to a larger shallow one, or a full one. > . Run `git fetch git://.../linux-2.6 master`, with a local ref > pointing at v2.6.14 commit, to pretend that we have everything > up to v2.6.14 to `upload-pack` running on the other end. How about refs/tags/start_shallow? > . Update the `origin` branch with the master commit object name > we just fetched from Linus. > > Design > ------ > > [...] > > Another functionality we would need is to tell `upload-pack` to > use `info/grafts` of downloader's choice. With this, after > fetching the objects for v2.6.14 commit, the downloader can set > up its own grafts file to cauterize the development history at > v2.6.14, and tell the `upload-pack` to pretend the kernel > history starts at that commit, while sending the tip of Linus' > development track to us. Why not just start another fetch? Then, "have <refs/tags/start_shallow>" would be sent, and upload-pack does the right thing? If you absolutely want to get only one pack, which then is stored as-is, upload-pack could start two rev-list processes: one for the tree and one for all the rest. > [...] > > [NOTE] > Most likely this is not directly run by the user but is run as > the first command invoked by the shallow clone script. Better make it an option to git-clone > 4. `upload-pack` notices this is a single commit request, and > sends an ACK if it can satisfy the request (or a NAK if it > can't, e.g. it does not have the asked commit). Instead of > doing the usual `get_common_commits` followed by > `create_pack_file`, it does: > > $ git rev-list -n1 --objects $commit | git pack-object Here it could say (git rev-list -n1 --objects $commit_since; git rev-list --objects ^$commit_since $commit) | git pack-object If the former is still needed (e.g. for git-tar-remote-tree), we could distinguish "single <ref>" and "shallow <ref>" commands. > [...] > > The second phase of the shallow clone is to fetch the history > since v2.6.14 to the tip. As I outlined above, I don't see the need for this. Ciao, Dscho - 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.htmlReceived on Mon Jan 30 22:40:19 2006
This archive was generated by hypermail 2.1.8 : 2006-01-30 22:40:31 EST