git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Rich Pixley <rich.pixley@palm.com>
To: Michael Witten <mfwitten@gmail.com>
Cc: Seth Robertson <in-gitvger@baka.org>,
	"git@vger.kernel.org" <git@vger.kernel.org>
Subject: Re: Newbie grief
Date: Thu, 03 May 2012 12:13:46 -0700	[thread overview]
Message-ID: <4FA2D8EA.7030809@palm.com> (raw)
In-Reply-To: <08704bd2e32343a4b9def80e4fa1efa2-mfwitten@gmail.com>

On 4/30/12 22:32 , Michael Witten wrote:
> On Mon, 30 Apr 2012 20:04:25 -0700, Rich Pixley wrote:
>
>> I don't need separate branches for each repository.  What I really want
>> is a common branch whose changes I can push back and forth between the
>> various repositories, or coordinate through a central cache, without
>> worrying about the underlying details that git is forcing me to confront.
>
> Here's a start for a more precise discussion.
>
> Sincerely,
> Michael Witten
>
>
> Cache server:
>
>    $ git clone --mirror "$uri_for_central_repo"
>
> Machine A:
>
>    $ git clone "$uri_for_cache_repo"
>    $ git checkout -b feature_0 origin/feature_0
>    $ # ... do some work ...
>    $ git push --set-upstream origin HEAD:shared/feature_0
>    $ git config push.default upstream
>
> Machine B:
>
>    $ git clone "$uri_for_cache_repo"
>    $ git checkout -b feature_0 origin/feature_0
>    $ # ... do some work that conflicts with work done on Machine A...
>    $ git push --set-upstream origin HEAD:shared/feature_0
>    To $uri_for_cache_repo
>     ! [rejected]        HEAD ->  shared/feature_0 (non-fast-forward)
>     error: failed to push some refs to '$uri_for_cache_repo'
>    To prevent you from losing history, non-fast-forward updates were rejected
>    Merge the remote changes (e.g. 'git pull') before pushing again.  See the
>    'Note about fast-forwards' section of 'git push --help' for details.
>    $ git pull origin shared/feature_0
>    From $uri_for_cache_repo
>     * branch            shared/feature_0 ->  FETCH_HEAD
>    Auto-merging a
>    CONFLICT (add/add): Merge conflict in a
>    Recorded preimage for 'a'
>    Automatic merge failed; fix conflicts and then commit the result.
>    $ # ... resolve conflict and commit results ...
>    $ git push --set-upstream origin HEAD:shared/feature_0
>    $ git config push.default upstream
>
> Machine A:
>
>    $ git pull # pulls in origin's shared/feature_0
>    $ # ... do some work ...
>    $ git push # pushes to origin's shared/feature_0
>
> Machine B:
>
>    $ git pull # pulls in origin's shared/feature_0
>    $ # ... do some work ...
>    $ git push # pushes to origin's shared/feature_0
>
> Machine A:
>
>    $ git pull
>    $ git remote add central "$uri_for_central_repo"
>    $ git push central HEAD:feature_0 # Assume there is a conflict
>    To $uri_for_central_repo
>     ! [rejected]        HEAD ->  feature_0 (non-fast-forward)
>    error: failed to push some refs to '$uri_for_central_repo'
>    To prevent you from losing history, non-fast-forward updates were rejected
>    Merge the remote changes (e.g. 'git pull') before pushing again.  See the
>    'Note about fast-forwards' section of 'git push --help' for details.
>    $ git pull central feature_0
>    $ # ... resolve conflict and commit results ...
>    $ git push central HEAD:feature_0 # Assume it succeeds this time
>    $ # Let's update the cache repo from Machine A:
>    $ git fetch central
>    $ git push origin 'refs/remotes/central/*:refs/heads/*'
>
> Machine B:
>
>    $ git pull
>    $ git pull . origin/feature_0 # Get new stuff cached from central server

This is probably what I'm going to end up using.

Just for comparison, here's a similar process in hg.

Cache server:

   $ hg clone $uri_for_central_repo

Machine A:

   $ hg clone $uri_for_cache_repo
   $ # ...do some work...
   $ hg push

Machine B:

   $ hg clone $uri_for_cache_repo
   $ # ...do some work...
   $ hg push # assume this collides
   pushing to $uri_for_cache_repo
   searching for changes
   abort: push creates new remote head 6d2eb0a6a278!
   (you should pull and merge or use push -f to force)
   $ hg push -f # the pull and merge case parallels git, so let's use 
push -f.

Any repo:

   $ hg pull # pulls in all changes including the dual heads
   $ hg merge # collapses the dual heads
   $ hg commit # commits the merge
   $ hg push

Machine A:

   $ hg pull # pulls in all changes so far
   $ hg up
   $ #... do some work ...
   $ hg push

Machine B

   $ hg pull
   $ hg up
   $ # ... do some work ...
   $ hg push

Any repo:

   $ hg pull $uri_to_central_repo
   $ hg merge
   $ hg push $uri_to_central_repo
   $ hg push # default is cache repo

Machine B:

   $ hg pull


Some Conclusions:

* the work flows are similar.

* the hg commands are simpler and have the defaults that we want, 
primarily because no extra branches are required.

* the hg error messages are straightforward, clear, and don't require 
any deep knowledge of the source code control system or it's 
limitations.  (I still don't understand what the git message on 
collision is saying.)

* hg has more options about how to handle the collisions or the merges. 
  While git can mimic some of those options, doing so requires a priori 
knowledge that isn't stored in the source code control system and 
therefor requires a human exchange which is optional with hg.

--rich

  parent reply	other threads:[~2012-05-03 19:13 UTC|newest]

Thread overview: 100+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-04-30 22:30 Newbie grief Rich Pixley
2012-04-30 23:31 ` Seth Robertson
2012-05-01  1:15   ` Rich Pixley
2012-05-01  1:32     ` Junio C Hamano
2012-05-01  1:55       ` Rich Pixley
2012-05-01  3:44     ` Sitaram Chamarty
2012-05-01 11:14       ` Ted Ts'o
2012-05-01 16:13         ` Sitaram Chamarty
2012-05-01 18:15           ` Rich Pixley
2012-05-01 18:20             ` Michael Witten
2012-05-01 18:52               ` Rich Pixley
2012-05-02 21:28                 ` Jakub Narebski
2012-05-01 18:42             ` Randal L. Schwartz
2012-05-01 20:52               ` Rich Pixley
2012-05-01 21:05                 ` Randal L. Schwartz
2012-05-01 21:12                   ` Junio C Hamano
2012-05-01 21:25                     ` Rich Pixley
2012-05-01 21:28                       ` Randal L. Schwartz
2012-05-01 21:57                         ` Rich Pixley
2012-05-01 22:56                           ` Michael Witten
2012-05-01 23:55                             ` Philip Oakley
2012-05-03 16:08                               ` Hallvard Breien Furuseth
2012-05-03 18:20                                 ` Rich Pixley
2012-05-03 23:04                                   ` Hallvard Breien Furuseth
2012-05-03 23:06                                     ` Hallvard Breien Furuseth
2012-05-03 18:46                             ` Rich Pixley
2012-05-03 21:09                             ` Junio C Hamano
2012-05-03 22:44                               ` Rich Pixley
2012-05-03 22:53                                 ` Randal L. Schwartz
2012-05-03 22:59                                 ` Junio C Hamano
2012-05-04 19:23                                 ` Felipe Contreras
2012-05-04 19:30                             ` Felipe Contreras
2012-05-04 19:41                               ` Michael Witten
2012-05-01 21:29                   ` Rich Pixley
2012-05-01 21:39                     ` Randal L. Schwartz
2012-05-01 22:07                       ` Rich Pixley
2012-05-01 22:17                         ` Andreas Ericsson
2012-05-01 23:01                         ` PJ Weisberg
2012-05-03 18:43                           ` Rich Pixley
2012-05-03 19:09                             ` Nathan Gray
2012-05-03 19:16                               ` Rich Pixley
2012-05-03 20:14                                 ` Randal L. Schwartz
2012-05-03 20:52                                   ` Rich Pixley
2012-05-04 15:56                                     ` Mark Brown
2012-05-04 18:23                                       ` Rich Pixley
2012-05-04 19:14                                         ` Jakub Narebski
2012-05-04 20:00                                         ` Mark Brown
2012-05-02 14:21                         ` Hallvard Breien Furuseth
2012-05-02 15:21                           ` Michael Witten
2012-05-03 12:23                             ` Hallvard Breien Furuseth
2012-05-03 12:53                               ` Randal L. Schwartz
2012-05-03 16:09                               ` Michael Witten
2012-05-03 16:20                                 ` Hallvard Breien Furuseth
2012-05-03 16:44                                   ` Michael Witten
2012-05-03 18:26                                   ` Rich Pixley
2012-05-03 19:33                                     ` Ted Ts'o
2012-05-01 23:30                     ` Felipe Contreras
2012-05-03 18:31                       ` Rich Pixley
2012-05-03 18:58                       ` Rich Pixley
2012-05-04 14:09                         ` Andreas Ericsson
2012-05-04 14:59                           ` Stephen Bash
2012-05-04 16:29                             ` Mark Brown
2012-05-04 19:13                         ` Felipe Contreras
2012-05-01 18:03         ` Rich Pixley
     [not found]       ` <4FA01C73.5000909@palm.com>
2012-05-02  0:44         ` Sitaram Chamarty
     [not found]   ` <4F9F28F5.2020403@palm.com>
2012-05-01  1:37     ` Seth Robertson
2012-05-01  3:04       ` Rich Pixley
2012-05-01  5:32         ` Michael Witten
2012-05-01  6:21           ` Junio C Hamano
2012-05-01  6:24             ` Michael Witten
2012-05-01 17:29             ` Rich Pixley
2012-05-01 17:33           ` Rich Pixley
2012-05-03 19:13           ` Rich Pixley [this message]
2012-05-03 20:19             ` Ronan Keryell
2012-05-03 21:13               ` Junio C Hamano
2012-05-03 22:23                 ` Ronan Keryell
2012-05-03 22:33                 ` Rich Pixley
2012-05-03 22:39                   ` Rich Pixley
2012-05-04  1:01                     ` Illia Bobyr
2012-05-04  3:13                       ` Nathan Gray
2012-05-04  4:35                         ` Michael Witten
2012-05-04  5:25                           ` Junio C Hamano
2012-05-04 10:09                             ` Carlos Martín Nieto
2012-05-04 14:50                               ` Junio C Hamano
2012-05-04 17:39                                 ` Junio C Hamano
2012-05-04 16:46                               ` Nathan Gray
2012-05-04 17:17                                 ` Illia Bobyr
2012-05-04 18:10                               ` Rich Pixley
2012-05-04 17:57                           ` Rich Pixley
2012-05-04 19:22                             ` Michael Witten
2012-05-04 19:18                         ` Andrew Sayers
2012-05-04 18:57             ` Jérôme Benoit
2012-05-04 20:03             ` Felipe Contreras
2012-05-04 20:27               ` Junio C Hamano
2012-05-04 20:45                 ` Felipe Contreras
2012-05-04 21:29                   ` Rich Pixley
2012-05-04 22:05                     ` Felipe Contreras
2012-04-30 23:35 ` Jan Krüger
2012-05-01 18:59   ` Rich Pixley
2012-05-02  8:25 ` Philippe Vaucher

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4FA2D8EA.7030809@palm.com \
    --to=rich.pixley@palm.com \
    --cc=git@vger.kernel.org \
    --cc=in-gitvger@baka.org \
    --cc=mfwitten@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).