Re: [PATCH] A new merge stragety 'subtree'.
- From
Shawn O. Pearce <spearce@spearce.org>
- Date
- Feb 17, 2007, 07:14 UTC
- Message-ID
- <20070217071425.GD27864@spearce.org>
- In-Reply-To
- <7vfy95y2n9.fsf@assigned-by-dhcp.cox.net>
Junio C Hamano <junkio@cox.net> wrote:
Show 15 quoted lines
> For normal merge strategies, if you are on branch A and merge > branch B into it, what you will get is exactly the same as what > you would get by merging branch A while being on branch A > (modulo the direction of conflict markers). With the subtree > merge, it is not the case anymore. If I pull from git-gui.git, > the resulting tree look like git.git with Shawn's updates. If > Shawn pulls from git.git, even after I did some changes on my > own to git-gui subdirectory, bypassing his tree, he will get a > merged result pertaining to git-gui.git repository > (i.e. git-gui/ subdirectory of what I have). This way, we can > continue merging from each other. > > Although I do not plan to commit anything in git-gui/ part of my > tree myself, bypassing Shawn, it is nice to know that it will > not introduce problems down the road.
This does actually cause a problem if you merge a git.git commit into git-gui.git (by stripping the git-gui/ part off). The problem is the entire git.git history would then become the second parent of the git-gui.git merge commit, and suddenly the git-gui.git repository increases by >11 MiB in size... ;-)
With regards to maintaining git-gui: I'll apply all patches to my tree and do testing there, then ask Junio to merge a tagged release over to git.git for inclusion in the next git release.
To avoid pulling the entire git.git history into git-gui, I'd ask that anyone bypassing me (e.g. if I'm being horribly unresponsive one week) checkout the git-gui branch from git.git, apply the change(s) there, then merge that branch into git.git using the subtree strategy. This way I can later fast-forward git-gui.git to the fixed commit, without sucking in more than I bargained for.
For example:
git log -n1 -- git-gui # copy the second parent... git checkout -b fixgg <secondparent> # do fixes... git checkout master git merge -s subtree fixgg
Then I can later obtain `fixgg` from the merge commit in git.git and update git-gui.git, without sucking in git.git's objects.
-- Shawn.