* Current Issues #3
@ 2006-05-22 8:44 Junio C Hamano
2006-05-22 10:18 ` Linus Torvalds
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Junio C Hamano @ 2006-05-22 8:44 UTC (permalink / raw)
To: git
[Third installment of the "Issues" series, but I've been half
awake for the past week or so, and I suspect I have missed some
topics that deserve further discussion.]
* Per branch configuration
The [section "foo"] configuration syntax update by Linus, and
git-parse-remote update to use remote.stuff.{url,push,pull} by
Johannes are now both in the "master". The stage is set to
discuss what to actually do with per-branch configuration.
We will use the [branch "foo"] section for configuration about
local branch named "foo". I do not think there is any
disagreement about this.
The ideas floated so far (I am forgetting many of them
perhaps):
1. "upstream" refers to the remote section to use when
running "git-{fetch,pull,push}" while on that branch.
[branch "master"]
upstream = "origin"
[remote "origin"]
url = "git://git.kernel.org/.../git.git"
fetch = refs/heads/master:refs/remotes/origin/master
2. "url/fetch/push" directly specifies what would usually be
taken from a remote section by "git-{fetch,pull,push}"
while on that branch.
[branch "foo"]
url = "company.com.xz:myrepo"
fetch = refs/heads/master:refs/remotes/origin/master
push = refs/heads/master:refs/heads/origin
* reflog
I still haven't merged this series to "next" -- I do not have
much against what the code does, but I am unconvinced if it is
useful. Also objections raised on the list that this can be
replaced by making sure that a repository that has hundreds of
tags usable certainly have a point.
^ permalink raw reply [flat|nested] 8+ messages in thread* Re: Current Issues #3 2006-05-22 8:44 Current Issues #3 Junio C Hamano @ 2006-05-22 10:18 ` Linus Torvalds [not found] ` <20060522071929.0be8d026.seanlkml@sympatico.ca> 2006-05-23 21:58 ` Jakub Narebski 2006-05-22 10:20 ` Martin Waitz 2006-05-22 21:54 ` Daniel Barkalow 2 siblings, 2 replies; 8+ messages in thread From: Linus Torvalds @ 2006-05-22 10:18 UTC (permalink / raw) To: Junio C Hamano; +Cc: git On Mon, 22 May 2006, Junio C Hamano wrote: > > * Per branch configuration > > The [section "foo"] configuration syntax update by Linus, and > git-parse-remote update to use remote.stuff.{url,push,pull} by > Johannes are now both in the "master". The stage is set to > discuss what to actually do with per-branch configuration. > > We will use the [branch "foo"] section for configuration about > local branch named "foo". I do not think there is any > disagreement about this. > > The ideas floated so far (I am forgetting many of them > perhaps): > > 1. "upstream" refers to the remote section to use when > running "git-{fetch,pull,push}" while on that branch. > > [branch "master"] > upstream = "origin" > > [remote "origin"] > url = "git://git.kernel.org/.../git.git" > fetch = refs/heads/master:refs/remotes/origin/master > > 2. "url/fetch/push" directly specifies what would usually be > taken from a remote section by "git-{fetch,pull,push}" > while on that branch. > > [branch "foo"] > url = "company.com.xz:myrepo" > fetch = refs/heads/master:refs/remotes/origin/master > push = refs/heads/master:refs/heads/origin I'd _much_ prefer (1) over (2). However, I wonder if we couldn't do even better. How about forgetting about the "branch" vs "remote" thing, and instead splitting it into _three_: "branch", "repository" and "remote branch". Something like [repo "origin"] url = "git://git.kernel.org/.../git.git" [repo "gitk"] url = "git://git.kernel.org/.../gitk.git" to describe two remote repositories (and NOTE! No branch descriptions within those. We're just describing the actual repository, so we might have things like "readonly" to indicate that we can't push to them, but if we do things like that, they would be "repo-wide" things that we describe for that repository), Then, we can describe remote branches within those repositories: [remote "origin/master"] repo = origin branch = master [remote "origin/next"] repo = origin branch = next [remote "origin/pu"] repo = origin branch = pu [remote "gitk/master"] repo = gitk branch = master now, here we're describing two things: the name of the remote is what we will then use for the ".git/remotes/<name>" thing to remember the last value, and we're describing where to get that data (which repo, and which branch). NOTE! In the example above, I made the name of the remote always match the <repo>/<branch> format, but that would be just a convention. You could do [remote "linus"] repo = kernel branch = master to describe the "linus" remote as the master branch of the "kernel" repository. Finally, local branches: [branch "master"] source = origin/master [branch "origin"] readonly source = origin/master [branch "next"] readonly source = origin/next [branch "pu"] readonly rebase source = origin/pu [branch "gitk"] readonly source = gitk/master This marks the things that just _track_ somebody elses branch as being readonly (so "master" and "origin" are really different: they're both branches, but one of them just tracks remotes/origin/master, while the other one can be committed to), and "pu" has been marked as not only being read-only, it also re-bases to its source. I dunno. Does this sound too verbose and abstract? Normally, you'd not have a lot of these. For example, for somebody who follows the kernel, you'd literally just have [branch "master"] source = linus [remote "linus"] repo = kernel branch = master [repo "kernel"] url = git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6 and you'd be done. The above would describe both the local "master" branch and the "remotes/linus" head, and give the relationship between them. The git repo is actually much more complex, especially if you want to track all of the different branches Junio has, and if you want to also track the branches Paul has to gitk. But with the above, you can fairly naturally do: - "git pull" No arguments. fetch the remote described by the current branch, and merge into current branch (we might decide to fetch all the remotes associated with that repo, just because once we do this, we might as well, but that's not that important to the end result). - "git pull <repo>" fetch all remotes that use <repo>. IFF the current branch is matched to one of those remotes, merge the changes into the current branch. But if you happened to be on another unrelated branch, nothing happens aside from the fetch. - "git pull <remote>" fetch just the named remote. IFF that remote is also the remote for the current branch, do merge it into current. Again, we _might_ decide to just do the whole repo. - "git pull <repo> <branchname>" fetch the named branch from the named repository and merge it into current (no ifs, buts or maybes - now we've basically overridden the default relationships, so now the <repo> is just a pure shorthand for the location of the repository) - "git pull <repo> <src>:<dst>" same as now. fetch <repo> <src> into <dst>, and merge it into the current branch (again, we've overridden any default relationships). but maybe this is overdesigned. Comments? Linus ^ permalink raw reply [flat|nested] 8+ messages in thread
[parent not found: <20060522071929.0be8d026.seanlkml@sympatico.ca>]
* Re: Current Issues #3 [not found] ` <20060522071929.0be8d026.seanlkml@sympatico.ca> @ 2006-05-22 11:19 ` Sean 0 siblings, 0 replies; 8+ messages in thread From: Sean @ 2006-05-22 11:19 UTC (permalink / raw) To: Linus Torvalds; +Cc: junkio, git On Mon, 22 May 2006 03:18:02 -0700 (PDT) Linus Torvalds <torvalds@osdl.org> wrote: > [...] > > but maybe this is overdesigned. Comments? It all looks good, especially your description of the git pull variations which seem more natural than what exists now. The only minor comment i'd make is that we shouldn't mix so many different names for the same thing. In your example you have "remote" (singular) sections with branch sections that contain "source" keys which map to those remote sections, both corresponding to "refs/remotes" (plural). There doesn't seem to be any need to stick with "source" as a key, so : [remote "origin/master"] repo = origin branch = master [branch "master"] remote = "origin/master" Sean ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Current Issues #3 2006-05-22 10:18 ` Linus Torvalds [not found] ` <20060522071929.0be8d026.seanlkml@sympatico.ca> @ 2006-05-23 21:58 ` Jakub Narebski 1 sibling, 0 replies; 8+ messages in thread From: Jakub Narebski @ 2006-05-23 21:58 UTC (permalink / raw) To: git Linus Torvalds wrote: [...] > But with the above, you can fairly naturally do: > > - "git pull" > > No arguments. fetch the remote described by the current branch, > and merge into current branch (we might decide to fetch all the > remotes associated with that repo, just because once we do this, > we might as well, but that's not that important to the end > result). > > - "git pull <repo>" (i.e. re-clone) > fetch all remotes that use <repo>. IFF the current branch is > matched to one of those remotes, merge the changes into the > current branch. But if you happened to be on another unrelated > branch, nothing happens aside from the fetch. > > - "git pull <remote>" > > fetch just the named remote. IFF that remote is also the remote > for the current branch, do merge it into current. Again, we > _might_ decide to just do the whole repo. > > - "git pull <repo> <branchname>" > > fetch the named branch from the named repository and merge it into > current (no ifs, buts or maybes - now we've basically overridden > the default relationships, so now the <repo> is just a pure > shorthand for the location of the repository) Fetch into curret branch, or specified by branch configuration, then current if unspecified? > - "git pull <repo> <src>:<dst>" > > same as now. fetch <repo> <src> into <dst>, and merge it into the > current branch (again, we've overridden any default relationships). > > but maybe this is overdesigned. Comments? It all means that within <repo> annd <remote> names should be unique (to know if we use "git pull <repo>" or "git pull <remote>"). Perhaps it would be nice to have - "git pull <repo> *:<dst>" - "git pull <repo> <src>:*" - "git pull <repo> *:*" and - "git pull <repo> <src>:<dst>:<to-merge>" as easier to remember options. Of course what is the remote branch related to <dst>, and what is local branch related to <src> would be in branch/remotes/repos configuration. BTW. what about --use-separate-remotes option support? -- Jakub Narebski Warsaw, Poland ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Current Issues #3 2006-05-22 8:44 Current Issues #3 Junio C Hamano 2006-05-22 10:18 ` Linus Torvalds @ 2006-05-22 10:20 ` Martin Waitz 2006-05-22 21:54 ` Daniel Barkalow 2 siblings, 0 replies; 8+ messages in thread From: Martin Waitz @ 2006-05-22 10:20 UTC (permalink / raw) To: Junio C Hamano; +Cc: git [-- Attachment #1: Type: text/plain, Size: 621 bytes --] hoi :) On Mon, May 22, 2006 at 01:44:15AM -0700, Junio C Hamano wrote: > 1. "upstream" refers to the remote section to use when > running "git-{fetch,pull,push}" while on that branch. > > [branch "master"] > upstream = "origin" what do you do for [branch "next"] here? Does it make sense to regard all refs/remotes/*/<branchname> as upstream and merge these into the current branch when pulling? Perhaps a pull could even merge all newly fetched remote heads into the corresponding branch, but for that we'd need to be able to merge without using the working dir. -- Martin Waitz [-- Attachment #2: Digital signature --] [-- Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Current Issues #3 2006-05-22 8:44 Current Issues #3 Junio C Hamano 2006-05-22 10:18 ` Linus Torvalds 2006-05-22 10:20 ` Martin Waitz @ 2006-05-22 21:54 ` Daniel Barkalow 2006-05-22 22:02 ` Carl Worth 2006-05-22 23:12 ` Shawn Pearce 2 siblings, 2 replies; 8+ messages in thread From: Daniel Barkalow @ 2006-05-22 21:54 UTC (permalink / raw) To: Junio C Hamano; +Cc: git On Mon, 22 May 2006, Junio C Hamano wrote: > * reflog > > I still haven't merged this series to "next" -- I do not have > much against what the code does, but I am unconvinced if it is > useful. Also objections raised on the list that this can be > replaced by making sure that a repository that has hundreds of > tags usable certainly have a point. I think it would make gitweb's summary view clearer, and Linus seemed interested in being able to look up what happened in the fast forward which was the first of several merges in a day. It could be replaced by a repository with hundreds of machine-readable tags with code to parse dates into queries for suitable tags. But I don't think there's an advantage to using the tag mechanism here, because you never want to look the history up by exactly which history it is (the thing that a tag ref is good for); you'll be looking for whatever reflog item is the newest not after a specified time, where the specified time is almost never a time that a reflog item was created. -Daniel *This .sig left intentionally blank* ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Current Issues #3 2006-05-22 21:54 ` Daniel Barkalow @ 2006-05-22 22:02 ` Carl Worth 2006-05-22 23:12 ` Shawn Pearce 1 sibling, 0 replies; 8+ messages in thread From: Carl Worth @ 2006-05-22 22:02 UTC (permalink / raw) To: Daniel Barkalow; +Cc: Junio C Hamano, git [-- Attachment #1: Type: text/plain, Size: 214 bytes --] On Mon, 22 May 2006 17:54:28 -0400 (EDT), Daniel Barkalow wrote: > On Mon, 22 May 2006, Junio C Hamano wrote: > > > * reflog Am I the only one that read that as re-flog rather than ref-log the first time? -Carl [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --] ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: Current Issues #3 2006-05-22 21:54 ` Daniel Barkalow 2006-05-22 22:02 ` Carl Worth @ 2006-05-22 23:12 ` Shawn Pearce 1 sibling, 0 replies; 8+ messages in thread From: Shawn Pearce @ 2006-05-22 23:12 UTC (permalink / raw) To: Daniel Barkalow; +Cc: Junio C Hamano, git Daniel Barkalow <barkalow@iabervon.org> wrote: > On Mon, 22 May 2006, Junio C Hamano wrote: > > > * reflog > > > > I still haven't merged this series to "next" -- I do not have > > much against what the code does, but I am unconvinced if it is > > useful. Also objections raised on the list that this can be > > replaced by making sure that a repository that has hundreds of > > tags usable certainly have a point. > > I think it would make gitweb's summary view clearer, and Linus seemed > interested in being able to look up what happened in the fast forward > which was the first of several merges in a day. > > It could be replaced by a repository with hundreds of machine-readable > tags with code to parse dates into queries for suitable tags. But I don't > think there's an advantage to using the tag mechanism here, because you > never want to look the history up by exactly which history it is (the > thing that a tag ref is good for); you'll be looking for whatever reflog > item is the newest not after a specified time, where the specified time is > almost never a time that a reflog item was created. The thing is this might also be easily represented as a structure of tags; for example: refs/logs/heads/<ref>/<year>/<month>/<day> <hour>:<min>:<sec>:<seq> where the tag is a tag of the commit which was valid in that ref at that time. Searching for an entry "around a particular time" isn't that much more difficult than parsing a file, you just have to walk backwards through the sorted directory listings then read the tag object which matches; that tag object will point at the tree/commit/tag which is was in that ref.. What's ugly about this is simply the disk storage: a ref file is an expensive thing (relatively speaking) on most UNIX file systems due to the inode overhead. If this was stored in a more compact format (such as a GIT tree) then this would cost very little. So the alternative that I have been mentaly kicking around for the past two days is storing the GIT_DIR/refs directory within a standard GIT tree. This of course would need to be an option that gets enabled by the user as currently most tools expect the refs directory to actually be a directory, not a tree. The advantage here is that unlike proposed reflog it is a compact ref representation which could be used by other features, such as tagging a GIT commit with the unique name of the same change from another SCM. Or tagging your repository on every automated build, which runs once every 5 minutes. -- Shawn. ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2006-05-23 21:58 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-05-22 8:44 Current Issues #3 Junio C Hamano
2006-05-22 10:18 ` Linus Torvalds
[not found] ` <20060522071929.0be8d026.seanlkml@sympatico.ca>
2006-05-22 11:19 ` Sean
2006-05-23 21:58 ` Jakub Narebski
2006-05-22 10:20 ` Martin Waitz
2006-05-22 21:54 ` Daniel Barkalow
2006-05-22 22:02 ` Carl Worth
2006-05-22 23:12 ` Shawn Pearce
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).