From: Carl Baldwin <cnb@fc.hp.com>
To: Junio C Hamano <junkio@cox.net>
Cc: Carl Baldwin <cnb@fc.hp.com>, git@vger.kernel.org
Subject: Re: How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)?
Date: Mon, 15 Aug 2005 10:23:24 -0600 [thread overview]
Message-ID: <20050815162324.GA9857@hpsvcnb.fc.hp.com> (raw)
In-Reply-To: <7vacjmqnu7.fsf@assigned-by-dhcp.cox.net>
Over the week-end, I was thinking about the thread "Re: How is working
on arbitrary remote heads supposed to work in Cogito". I wanted to
weigh in an opinion that I've developed on it but thought it deserved a
new thread.
Somewhere in the thread something was mentioned about maintaining
<local branch>:<remote branch> pairs in the git repository when pushes
and pulls are performed. I think the argument was actually against
keeping this information and ultimately against allowing pushes to a
branch of a different name.
I wanted to weigh in with why it would be a good idea to make note of
this information. The only thing that would be required of the plumbing
is to specify how this information is kept and if a push or pull is
performed directly with git then make note of the push/pull
relationship. Everything else would be up to the porcelains.
So, I envision a simple directed graph where nodes represent the
branches (wether local or remote) and the edges represent push or pull
relationships between branches.
Git already stores the nodes.
The edges, in theory, would spring into existence when a push or pull is
performed between two branches for the first time.
This graph will be extremely useful for manageing flow in a project. It
could enable something as simple as a script that would walk the edges
and tell which ones have fallen behind. It would also be possible to
easily pull up a visual representation of the graph (with graphviz,
maybe). This sort of thing might prove to be a valuable orientation
tool for the developer or project manager.
It could also enable some very powerful project flow management --- in a
porcelain of course --- that would manage flow from an engineer's own
sand-box through software engineering 'gates' such as integration,
quality assurance, product maintenance and the documentation and
sign-offs required to pass through each of these gates.
It could also be used to aid in documenting and managing the, already
existent, linux tree development flow in whatever way suits.
This is a big return on investment. Little would be required of the
plumbing to maintain these 'edges', just add to them when it performs a
push/pull on an edge that hasn't already been recorded. Any changes or
deletions could be handled by the user or by some porcelain.
I think it is important, though, to specify how this information should
be stored to maintain compatibility between porcelains while (hopefully)
allowing for some degree of flexibility. I don't yet know where this
line should be drawn.
Carl
On Sat, Aug 13, 2005 at 12:48:32AM -0700, Junio C Hamano wrote:
> Carl Baldwin <cnb@fc.hp.com> writes:
>
> > On Fri, Jul 29, 2005 at 08:10:51AM +0000, Petr Baudis wrote:
> >> Exactly. I want much more freedom in pushing, the only requirement being
> >> that "the to-be-replaced remote head is ancestor of the to-be-pushed
> >> local head". I think (am I wrong?) git-send-pack localhead:remotehead
> >> would work just fine for me, the only thing I need is the support for
> >> different local and remote head names.
> >
> > Sorry to join the game so late. I've only read this thread now.
>
> Just in case you have not noticed, the push in 0.99.4 and
> onwards does exactly that. Please see git-push-script.txt in
> the Documentation/ directory --- oops, there is no such thing.
>
> Please see git-send-pack.txt instead, and if you feel like it, I
> would appreciate a patch to add the missing documentation for
> git-push-script ;-).
>
> What's not supported well yet is the opposite --- downloading
> multiple refs and dealing with them.
>
> Johannes Schindelin calls this "reverse push", and I think that
> is really a good name to describe what it does. It takes a
> remote repository and possibly multiple refs, downloads the
> objects to complete the named remote references, and updates the
> local refs only if the remote refs are fast forward children of
> the local refs being replaced, just like "push" fast forwards
> the remote refs using the local refs. In other words, given
> <src> and <dst> repository, the following should do the same
> thing:
>
> On <src> repository machine, with GIT_DIR being the <src> repository:
> $ git push <dst> <ref-local-name>:<ref-remote-name>...
>
> On <dst> repository machine, with GIT_DIR being the <dst> repository:
> $ git pull <src> <ref-remote-name>:<ref-local-name>...
>
> Johannes posted a script on the list a couple of days ago, which
> should work well, except that it was written before the
> git-fetch-pack command was updated to natively download from
> multiple refs, so it does not know how to fetch multiple refs at
> a one go.
>
> -jc
>
--
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Carl Baldwin Systems VLSI Laboratory
Hewlett Packard Company
MS 88 work: 970 898-1523
3404 E. Harmony Rd. work: Carl.N.Baldwin@hp.com
Fort Collins, CO 80525 home: Carl@ecBaldwin.net
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
next prev parent reply other threads:[~2005-08-15 16:23 UTC|newest]
Thread overview: 41+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-07-27 12:58 How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)? Josef Weidendorfer
2005-07-28 1:32 ` Junio C Hamano
2005-07-28 12:08 ` Petr Baudis
2005-07-28 13:07 ` Johannes Schindelin
2005-07-28 15:35 ` Petr Baudis
2005-07-28 15:56 ` Johannes Schindelin
2005-07-28 16:18 ` Petr Baudis
2005-07-28 16:52 ` Junio C Hamano
2005-07-28 17:32 ` Johannes Schindelin
2005-07-28 18:45 ` Ryan Anderson
2005-07-28 18:51 ` Johannes Schindelin
2005-07-28 18:39 ` Petr Baudis
2005-07-28 18:49 ` Johannes Schindelin
2005-07-28 19:47 ` Matthias Urlichs
2005-07-28 20:14 ` Johannes Schindelin
2005-07-29 7:11 ` Petr Baudis
2005-07-29 2:24 ` Junio C Hamano
2005-07-29 7:06 ` Petr Baudis
2005-07-29 7:48 ` Junio C Hamano
2005-07-29 8:10 ` Petr Baudis
2005-07-29 8:54 ` Junio C Hamano
2005-07-29 9:40 ` Petr Baudis
2005-07-29 10:57 ` Johannes Schindelin
2005-07-29 11:13 ` Petr Baudis
2005-07-29 12:26 ` Johannes Schindelin
2005-07-29 12:28 ` Petr Baudis
2005-07-30 2:11 ` Junio C Hamano
2005-07-29 20:40 ` Matthias Urlichs
2005-07-30 22:16 ` Junio C Hamano
2005-08-13 4:11 ` Carl Baldwin
2005-08-13 7:48 ` Junio C Hamano
2005-08-15 16:23 ` Carl Baldwin [this message]
2005-08-15 23:55 ` Johannes Schindelin
2005-07-29 9:10 ` Josef Weidendorfer
2005-07-28 21:13 ` Matthias Urlichs
2005-07-29 7:14 ` Petr Baudis
2005-07-28 18:53 ` Josef Weidendorfer
2005-07-28 19:19 ` Unnamed branches Petr Baudis
2005-07-28 16:14 ` How is working on arbitrary remote heads supposed to work in Cogito (+ PATCH)? Junio C Hamano
2005-07-28 16:23 ` Petr Baudis
2005-07-28 15:35 ` Petr Baudis
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=20050815162324.GA9857@hpsvcnb.fc.hp.com \
--to=cnb@fc.hp.com \
--cc=git@vger.kernel.org \
--cc=junkio@cox.net \
/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