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.
next prev parent 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).