Junio C Hamano <junkio@cox.net> wrote:So I've implemented my own Git subproject support in a Java based tool we use internally. Its actually driving the Git plumbing (as JGit isn't complete enough to do the job) but applies quite a bit to this discussion as it is a working system that implements this "checkout in superproject and recurse into subproject". First I don't use the subproject support in the core plumbing, because that came along from Linus about 2 days after I wrote this implementation. Our data file looks like: use-component: subproject1 >=df8cfac815... use-component: subproject2 >=af9b543820... Or really anything that is a valid commit-ish, and often these are actually just annotated tag names. During our build process we scan the root project's data file, and clone by the relative URL anything we cannot find locally: $(git config remote.origin.url)/../component-links/subproject1.git to get the subproject repository. We don't require that the subproject1 directory actually be called subproject1 in the superproject, its just a recommendation. That data file is also our build-system driver and the build system driver is pretty darn smart about guessing what is going on. ;-) You'll notice however that we (more or less) have a very flat structure. The component-links directory is really just a set of symlinks pointing back up a level, as sometimes a component is not stored in a repository named the component name, but the component name matters to the build system. Yes. Except we do a few things differently: - Only update the subproject if its a strict fast-forward. - Abort on a dirty working directory in the subproject or if a merge would be required to keep the current commit and the new commit. Yes, we don't really support going "backwards". - The merge aborting thing is probably wrong for some users, but blindly switching to the target commit feels somewhat wrong in our own uses. Sometimes you need the current version of the subproject to help you debug an older version of the superproject, or sibling subproject. - You can't just checkout $commit if you can rev-parse it. You need to verify it and its entire reachable object set exists. See the local fetch fast-path thing you did recently in e3c6f240fd. - We update the user's current branch. Because we are doing a strict fast-forward we're also assuming the user wants the current branch to stay correlated to the superproject branch. Why? Most of our users keep the same branch name in all repositories. -- 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
| Greg Kroah-Hartman | [PATCH 001/196] Chinese: Add the known_regression URI to the HOWTO |
| Ondrej Zary | pata_it821x completely broken |
| Jeremy Fitzhardinge | [PATCH 02 of 36] x86: add memory clobber to save/loadsegment |
| Thomas Renninger | AMD Mobile Semprons (3500+, 3600+,...) break with nohz and highres enabled |
git: | |
| Linus Torvalds | People unaware of the importance of "git gc"? |
| Jakub Narebski | Octopus merge: unique (?) to git, but is it useful? |
| Junio C Hamano | [ANNOUNCE] GIT 1.5.3-rc4 |
| Theodore Tso | Re: git on MacOSX and files with decomposed utf-8 file names |
| qw er | OpenBSD sucks |
| Richard Stallman | Real men don't attack straw men |
| Henning Brauer | Re: About Xen: maybe a reiterative question but .. |
| Kevin Neff | Patching a SSH 'Weakness' |
| David Miller | [GIT]: Networking |
| Steve Wise | pktgen question |
| Jeff Garzik | Re: [bug?] tg3: Failed to load firmware "tigon/tg3_tso.bin" |
| Waskiewicz Jr, Peter P | RE: [PATCH 2/3][NET_BATCH] net core use batching |
