Re: [RFC] Submodules in GIT
From: Jakub Narebski <hidden>
Date: 2016-08-11 20:16:54
<opublikowany i wysłany> Torgil Svensson wrote:
On 12/16/06, Jakub Narebski [off-list ref] wrote:
quoted
quoted
Now it doesn't looks like trees/blobs anymore so maybe a link object is handy: README 100644 blob <sha1 of blob> REPORTING-BUGS 100644 link <sha1 of link> AUTHORS 040000 tree <sha1 of tree> arch 040000 tree <sha1 of tree> block 040000 link <sha1 of link> misc
This would be (using the submodule original proposal)
140000 link <sha1 of link> misc
quoted
quoted
link-object: <sha1 of commit> <sha1 of tree/blob>What do you need <sha1 of tree/blob> for in link-object? Wouldn't you use usually the sha1 of top tree of a commit, which is uniquely defined by commit object, so you need only <sha1 of commit>?1. "Sparse" repository's - In my example, I want to cherry-pick header-files or binary-files from different projects without fetching all, potentially huge, submodules in their entirety. Imaging having X, kernel, gcc, gtk and libc6 as sub-projects and you really only care about some header files. 2. Super-module directory-hierarchy independent from submodules. Super-project want to have the header-files and binaries it's own way. This also gives version controlled file-collections, the "release case" in my example - collecting different binaries and header-files from different submodules together in a new directory-structure, add some documentation and configuration files and get the whole thing under strong version-control down to the beginning of time for each little component.
All fine, but this does not and I think cannot protect us from the fact that we can have <sha1 of tree/blob> which doesn't match <sha1 of commit>. I think it would be better to have sparse/partial checkout first. But that is just my idea. Because with <sha1 of tree/blob> which is not sha1 of commit tree you might loose (I think) the ability to merge, for example your changes to submodule with upstream.
3. Super-module development independent of submodules - If we have the tree/blob-object with all it contents in the database many git-operations can act as the link (commit) wasn't there since we have access to all relevant data to work with. This makes it easy to clone the super-project and work on it seamlessly without having to care about submodules or mapping up submodule repository's (unless you want to modify the links or the data underneath it of course).
This is I think irrelevant to the fact if we have only <sha1 of commit>, or link object and also <sha1 of tree/blob> -- Jakub Narebski Warsaw, Poland ShadeHawk on #git