From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: "Eric S. Raymond" Newsgroups: gmane.emacs.devel Subject: Re: What a modern collaboration toolkit looks like Date: Wed, 2 Jan 2008 07:17:45 -0500 Organization: Eric Conspiracy Secret Labs Message-ID: <20080102121745.GD17588@thyrsus.com> References: <20080101171120.GC3830@muc.de> <20080101.190535.32709273.wl@gnu.org> <20080101182742.GE3830@muc.de> <20080101.192802.05328072.wl@gnu.org> Reply-To: esr@thyrsus.com NNTP-Posting-Host: lo.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-Trace: ger.gmane.org 1199276275 4129 80.91.229.12 (2 Jan 2008 12:17:55 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Wed, 2 Jan 2008 12:17:55 +0000 (UTC) Cc: acm@muc.de, eliz@gnu.org, emacs-devel@gnu.org, esr@snark.thyrsus.com To: Richard Stallman Original-X-From: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Wed Jan 02 13:18:15 2008 Return-path: Envelope-to: ged-emacs-devel@m.gmane.org Original-Received: from lists.gnu.org ([199.232.76.165]) by lo.gmane.org with esmtp (Exim 4.50) id 1JA2Xx-0006WQ-Mz for ged-emacs-devel@m.gmane.org; Wed, 02 Jan 2008 13:18:09 +0100 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JA2Xb-0001Mb-Ez for ged-emacs-devel@m.gmane.org; Wed, 02 Jan 2008 07:17:47 -0500 Original-Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1JA2XY-0001M1-Oj for emacs-devel@gnu.org; Wed, 02 Jan 2008 07:17:44 -0500 Original-Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1JA2XX-0001JK-5D for emacs-devel@gnu.org; Wed, 02 Jan 2008 07:17:43 -0500 Original-Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1JA2XX-0001JE-17 for emacs-devel@gnu.org; Wed, 02 Jan 2008 07:17:43 -0500 Original-Received: from static-71-162-243-5.phlapa.fios.verizon.net ([71.162.243.5] helo=snark.thyrsus.com) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1JA2XM-0008Fk-9V; Wed, 02 Jan 2008 07:17:32 -0500 Original-Received: by snark.thyrsus.com (Postfix, from userid 23) id C5CD3830B84; Wed, 2 Jan 2008 07:17:45 -0500 (EST) Content-Disposition: inline In-Reply-To: X-Eric-Conspiracy: There is no conspiracy User-Agent: Mutt/1.5.15+20070412 (2007-04-11) X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 3) X-BeenThere: emacs-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "Emacs development discussions." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Original-Sender: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Errors-To: emacs-devel-bounces+ged-emacs-devel=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.devel:85885 Archived-At: Richard Stallman : > Is this substantially different from CVS, or is it just relabeling? > It sounds like `git push' is basically equivalent to CVS commit. I have not yet studied git specifically (that's coming after I finish the evaluations on Arch and monotone), but I believe all the modern DVCSes handle this the same way. In my survey paper, I'm calling it the "commit-before-merge" model, as opposed to "merge-before-commit" which is what CVS and Subversion do. It seems to have originated with monotone. CVS and Subversion try to maintain a linear version history unless you do explicit branching. So when you commit a change against an out-of-date revision, they raise a conflict; you have to merge news before being allowed to finish the commit. In modern DVCSes, a push never blocks. The sequence of changesets you developed is grafted into the repo as a branch attached to the revision you pulled from. If no one else has committed or pushed against that revision, the line of development remains linear. If someone has, you have the analogue of a CVS conflict -- the revision is now a branch point with two histories going forward. Later, someone may do a merge operation that fuses those two branches together again. Thus, "commit-before-merge". This is certainly the way monotone, Mercurial, and bzr operate. As I said, I have not yet studied git specifically but I'm pretty sure it works the same way. -- Eric S. Raymond