git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Junio C Hamano <junkio@cox.net>
To: git@vger.kernel.org
Cc: Petr Baudis <pasky@suse.cz>
Subject: Re: keeping remote repo checked out?
Date: Mon, 28 Nov 2005 11:35:23 -0800	[thread overview]
Message-ID: <7vsltgtvk4.fsf@assigned-by-dhcp.cox.net> (raw)
In-Reply-To: <20051128105736.GO22159@pasky.or.cz> (Petr Baudis's message of "Mon, 28 Nov 2005 11:57:36 +0100")

Petr Baudis <pasky@suse.cz> writes:

> Dear diary, on Mon, Nov 28, 2005 at 08:48:26AM CET, I got a letter
> where Junio C Hamano <junkio@cox.net> said that...
>> James Cloos <cloos@jhcloos.com> writes:
>> 
>> > Is it possible to arrange that a push does a checkout on the remote
>> > the same way a pull does on the local?
>> 
>> Creative use of hooks/post-update would solve that.
>> 
>> However, you should be very careful if you sometimes edit on
>> server and sometimes push from other machine to the server on
>> the same branch on the server.
>
> Why? At worst you will get files with conflict markers on the server,
> which isn't that huge problem and just what you have to expect when you
> do this kind of thing.

Both of us are right and talking about the same thing.  You are
right that as long as hooks/post-update is done correctly the
one who works on the server should not have to worry.  I am
right that the hooks/post-update for that setup needs to be done
very carefully ;-).

Here are the things whoever is doing the hooks/post-update for
this particular setup needs to think about.

 - is it safe to assume that the guy working on the server
   working tree never switch branches?  otherwise, what to do if
   the working tree has different branch checked out when push
   called post-update?

 - should it allow forced-push that sets HEAD to non descendant
   of the current HEAD?  In a shared repository setup,
   disallowing forced-push is a good discipline.  OTOH, if this
   is primarily used as an installation mechanism to a remote
   hosting site, allowing forced-push may be ok.

 - should it do 'git-checkout', 'git-reset --hard HEAD', or
   'git-pull . branch_to_push_into'?  The former two pretty much
   assumes no development happens on the server repository and
   git push is used primarily as an installation mechanism.  The
   latter is to keep a branch, other than "master" that is
   always checked out on the server machine, and have people
   push into a different branch and merge with it automatically
   when a push happens.  what would you do when a merge conflict
   happens?

On a tangent, the last point brings up an interesting
shared-repo usage pattern.  When you have a shared central
repository like CVS, you could arrange things this way:

 * On the shared repository, prepare one branch per developer
   who is pushing into it, plus "master".

 * The developer pull from "master" and work in her private
   repository.  The changes are pushed into her own branch on
   the shared repository machine.

 * The the shared repository machine tries to merge "master"
   into developer branches when the developer branch head is
   updated.  If it does not trivially resolve, the developer
   branch head is left as the last push by the developer
   (i.e. not recording the merge).  If it does resolve, it is
   checked out into playpen area, built and testsuite run, and
   if all look well, "master" is updated with the result of the
   merge.  A notification is sent to the developer to tell which
   of the above actions happened.

   This does not have to happen in the update hook and you
   probably would not want to because it would be a lenthy
   operation.  The update hook can be used to maintain recent
   push log for a cron job that runs the "merge-test-integrate"
   procedure to decide which branch is interesting.

I am not sure if people would find this useful, though.

  reply	other threads:[~2005-11-28 19:35 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-28  7:13 keeping remote repo checked out? James Cloos
2005-11-28  7:48 ` Junio C Hamano
2005-11-28 10:57   ` Petr Baudis
2005-11-28 19:35     ` Junio C Hamano [this message]
2005-11-28 21:28       ` Petr Baudis
2005-11-28 21:46         ` Junio C Hamano
2005-11-28 22:26         ` Linus Torvalds
2005-11-29  0:19           ` Daniel Barkalow
2005-11-29  0:43             ` Linus Torvalds
2005-11-29  2:35               ` Daniel Barkalow
2005-11-29  2:39                 ` Linus Torvalds
2005-11-29  3:40                   ` [PATCH] " Daniel Barkalow
2005-11-29  4:34                     ` Linus Torvalds
2005-11-29  6:02                       ` Daniel Barkalow
2005-11-29  6:38                         ` Junio C Hamano
2005-11-29  6:57                           ` Daniel Barkalow
2005-11-29  7:52                             ` Junio C Hamano
2005-11-29 13:39                               ` Matthias Urlichs
2005-11-29 17:31                                 ` Junio C Hamano
2005-11-29 17:22                               ` Daniel Barkalow
2005-11-29 19:28                                 ` Junio C Hamano
2005-11-29 21:44                                   ` Daniel Barkalow
2005-11-29 12:14                             ` Matthias Urlichs
2005-12-01  1:15   ` James Cloos
2005-12-01  2:43     ` Junio C Hamano

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=7vsltgtvk4.fsf@assigned-by-dhcp.cox.net \
    --to=junkio@cox.net \
    --cc=git@vger.kernel.org \
    --cc=pasky@suse.cz \
    /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).