Development models, rewriting history (Re: Emacs Bazaar repository)
Teemu Likonen
tlikonen at iki.fi
Mon Mar 17 12:46:14 GMT 2008
Matthieu Moy kirjoitti:
> As opposed to that, in the git community, fixes done after
> submitting a merge request are usually done by rewritting history.
> The idea is that each commit, not just the one in "mainline" should
> be correct.
It seems to me that you are partly wrong here.
> Take an example :
>
> revno: 3283
> committer: Canonical.com Patch Queue Manager <pqm at pqm.ubuntu.com>
> branch nick: +trunk
> timestamp: Sun 2008-03-16 02:26:32 +0000
> message:
> (Andrew Bennetts) Fix some LockableFiles warnings from test_smart.
> [...]
> ------------------------------------------------------------
> revno: 3194.1.3
> [...]
> Change "that that" to just "that".
> ------------------------------------------------------------
> revno: 3194.1.1
> [...]
> Fix one LockableFiles warning from test_smart.py
> Revision 3194.1.3 fixes a typo introduced earlier in 3194.1.1.
>
> Had the same senario occured in the Git development, the author would
> have rewond his private branch to 3194.1.1, "git commit --anotate"-ed
> the patch to remove the typo, rebased the rest of the branch on top
> of it, and re-submitted the result for a merge.
If the patch series has not been applied to main upstream branches yet
(only been discussed publicly), then the developer certainly modifies
the series in his/her private branch (git add --interactive, git
commit --amend, git rebase --interactive etc.) and publishes the series
again to mailing list for reviewing. At this point there is not even
any public revisions/commits for these patches and the series can be
fine-tuned as much as possible. Patches sent to the git mailing lists
are not automatically applied to any public branches.
If bug/typo is already in the upstream then only new commits are made to
fix them. A developer fixing a bug will prepare a new commit on top of
current tree. There's no messing with the past anymore. And new merge
to the upstream will show this fix commit.
You can confirm this by browsing the history of maintainer's git tree
and following the development. In the main git tree there's a file
Documentation/howto/maintain-git.txt which promises that
branches 'master', 'maint' and 'next' will never have their history
rewritten. You can always safely pull from these. (These branches are
what I have called 'upstream' earlier.)
Rebasing and other history rewriting happens in temporary feature
branches and (people's personal) experimental branches. It happens when
changes are being prepared (to keep changes up to date and in logical
units), not after they have been merged to these official upstream
branches.
I don't know what this has got to do with Emacs and Bazaar. Great tools
both. I just felt that you were partly wrong about git development and
the practice of rewriting history. :)
More information about the bazaar
mailing list