* merge time
@ 2007-07-29 17:33 Matthew L Foster
2007-07-29 23:19 ` Jakub Narebski
` (2 more replies)
0 siblings, 3 replies; 44+ messages in thread
From: Matthew L Foster @ 2007-07-29 17:33 UTC (permalink / raw)
To: git; +Cc: mfoster167
Sorry to bring up the time issue again [that I am perhaps still confused about] but I have been
playing around with git more and I think I can phrase my question/observation better.
>From viewing gitweb.cgi I have observed a situation where Linus creates a tag, say rc1, and then
he later merges changes but some subset of those changes/commits show up in the list in time order
as taking place _before_ the rc1 tag was made even though they were merged after. Do I describe a
real or possible phenomenon? And does this happen because the developer that made the subset of
changes in question commit them to his/her local repository in time order before the rc1 tag was
made? So an external repository had the change before the rc1 tag was made but Linus' repository
didn't? But internally git on Linus' machine knows that the gitweb.cgi displayed time order is
wrong as far as the state is concerned because each repository's index file keeps local track of
the true local state [just time isn't reconcilable], or am I missing something(s)?
Is it possible for gitweb.cgi to have a new view mode that sorts/displays the list based on merge
time for commits (the time merged into Linus' or whatever repository) so the above situation
doesn't happen? The actual time of a local commit should be the time it was merged locally not the
time it was created externally/originally, right? Where can I find the gitweb.cgi source/package?
I could maybe hack gitweb.cgi myself.
Please CC me on any replies since I am not subscribed to the list.
-Matt
____________________________________________________________________________________
Get the Yahoo! toolbar and be alerted to new email wherever you're surfing.
http://new.toolbar.yahoo.com/toolbar/features/mail/index.php
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-29 17:33 merge time Matthew L Foster @ 2007-07-29 23:19 ` Jakub Narebski 2007-07-29 23:35 ` Linus Torvalds 2007-07-30 12:44 ` Rogan Dawes 2 siblings, 0 replies; 44+ messages in thread From: Jakub Narebski @ 2007-07-29 23:19 UTC (permalink / raw) To: git [Cc: Matthew L Foster <mfoster167@yahoo.com>, git@vger.kernel.org] Please, word wrap lines around 70 - 76 column. Matthew L Foster wrote: > Sorry to bring up the time issue again [that I am perhaps still confused > about] but I have been playing around with git more and I think I can > phrase my question/observation better. > > From viewing gitweb.cgi I have observed a situation where Linus creates > a tag, say rc1, and then he later merges changes but some subset of those > changes/commits show up in the list in time order as taking place _before_ > the rc1 tag was made even though they were merged after. Of course. The time ordering is by the time commits were _created_, not when they were merged. In git, you can try tu use --topo-order parameter to git-log. In gitweb, not yet. > Do I describe a real or possible phenomenon? Real phenomenon. > And does this happen because the developer that made the subset of changes > in question commit them to his/her local repository in time order before > the rc1 tag was made? So an external repository had the change before the > rc1 tag was made but Linus' repository didn't? That's correct. Well, Linus' repository might have had change, but just not merged in, but that is just small detail. > But internally git on Linus' machine knows that the > gitweb.cgi displayed time order is wrong as far as the state is concerned > because each repository's index file keeps local track of the true local > state [just time isn't reconcilable], or am I missing something(s)? Git does not know, and git proper has no utility to show for each commit when it was merged to given branch. And that is even more complicated by the fast-forward merges. Reflog (local matter, not displayed in gitweb, available as "git reflog show <branch>" or "git log --show-reflog [<branch>]" in git) keeps track of the branch tip history; it doesn't offer information [you think] you want. > Is it possible for gitweb.cgi to have a new view mode that sorts/displays > the list based on merge time for commits (the time merged into Linus' or > whatever repository) so the above situation doesn't happen? The actual > time of a local commit should be the time it was merged locally not the > time it was created externally/originally, right? I don't think that it is possible, but you are welcome to try... > Where can I find the gitweb.cgi source/package? > I could maybe hack gitweb.cgi myself. Gitweb is now in the git.git repository, in gitweb/gitweb.perl (see also gitweb/README and gitweb/INSTALL). > Please CC me on any replies since I am not subscribed to the list. Please Cc: list. -- Jakub Narebski Warsaw, Poland ShadeHawk on #git ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-29 17:33 merge time Matthew L Foster 2007-07-29 23:19 ` Jakub Narebski @ 2007-07-29 23:35 ` Linus Torvalds 2007-07-30 1:11 ` Matthew L Foster 2007-07-30 12:44 ` Rogan Dawes 2 siblings, 1 reply; 44+ messages in thread From: Linus Torvalds @ 2007-07-29 23:35 UTC (permalink / raw) To: Matthew L Foster; +Cc: git On Sun, 29 Jul 2007, Matthew L Foster wrote: > > From viewing gitweb.cgi I have observed a situation where Linus creates > a tag, say rc1, and then he later merges changes but some subset of > those changes/commits show up in the list in time order as taking place > _before_ the rc1 tag was made even though they were merged after. Absolutely. This is very common indeed. It's even more common with not the -rc1 tag, but a release. When I cut a full release, that "opens the floodgates" for the merge window, and a lot of people who have committed their changes (maybe weeks or *months* before) but where the changes weren't appropriate to be merged before the merge window, will now ask me to pull. So you may have the situation that 2.6.22 was released, but then a few days later I'll merge stuff that was actually committed two weeks before the 2.6.22 release, but was not _in_ the release. > Do I describe a real or possible phenomenon? And does this happen > because the developer that made the subset of changes in question commit > them to his/her local repository in time order before the rc1 tag was > made? Yes. I would seriously suggest you not use "gitweb" as your way to look at the repository, because you'll never see all the interactions that way. Cloning a git repository (not necessarily the kernel, but it needs to be something with concurrent developement), and exploring it locally with "gitk" or "qgit" is a _lot_ more informative. When you see the actual history chains graphically, something that might look "odd" in gitweb (commits that look old but weren't there a few days ago) suddenly makes tons of sense. > So an external repository had the change before the rc1 tag was made but > Linus' repository didn't? But internally git on Linus' machine knows > that the gitweb.cgi displayed time order is wrong as far as the state is > concerned because each repository's index file keeps local track of the > true local state [just time isn't reconcilable], or am I missing > something(s)? Well, there i sno "wrong" time. There are just "different" times. The only thing git really tracks is not actually the time (that's purely for human consumption), but the *relationship* between commits. So git really very fundmanetally just tracks things like "commit X was the parent of commit Y", and the time is really immaterial. The time, to git, is not really different from authorship: it's very important to track when something was done, but it's really purely informational, exactly the same way the _author_ is purely informational. It has no "meaning" for git itself. > Is it possible for gitweb.cgi to have a new view mode that > sorts/displays the list based on merge time for commits (the time merged > into Linus' or whatever repository) so the above situation doesn't > happen? The public repositories don't even know what the merge time was for me. That's a purely local feature, and while I can see it in my private repository that I actually did the merge in, I don't publish that information. It's incidental, and quite frankly, it's "wrong" to care: because "Linus' tree" is really not even supposed to be special. Linus ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-29 23:35 ` Linus Torvalds @ 2007-07-30 1:11 ` Matthew L Foster 2007-07-30 1:27 ` david 2007-07-30 2:29 ` Linus Torvalds 0 siblings, 2 replies; 44+ messages in thread From: Matthew L Foster @ 2007-07-30 1:11 UTC (permalink / raw) To: Linus Torvalds; +Cc: git, mfoster167 --- Linus Torvalds <torvalds@linux-foundation.org> wrote: > Well, there i sno "wrong" time. There are just "different" times. The only > thing git really tracks is not actually the time (that's purely for human > consumption), but the *relationship* between commits. So git really very > fundmanetally just tracks things like "commit X was the parent of commit > Y", and the time is really immaterial. Is it possible for git and/or gitweb to know that commits X and Y are descendents of merge C and use the time merge C happened locally for both instead of using the time commits X and Y were created? It seems to me changes showing up as being made long before they really were merged is a very serious problem verification wise but if everyone is using git then perhaps it's not as bad as I think. What happens when security bug fix Z errantly seems to be in v2.6.22 but in reality its not? Thanks for the responses, -Matt ____________________________________________________________________________________ Park yourself in front of a world of choices in alternative vehicles. Visit the Yahoo! Auto Green Center. http://autos.yahoo.com/green_center/ ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 1:11 ` Matthew L Foster @ 2007-07-30 1:27 ` david 2007-07-30 2:29 ` Linus Torvalds 1 sibling, 0 replies; 44+ messages in thread From: david @ 2007-07-30 1:27 UTC (permalink / raw) To: Matthew L Foster; +Cc: Linus Torvalds, git On Sun, 29 Jul 2007, Matthew L Foster wrote: > --- Linus Torvalds <torvalds@linux-foundation.org> wrote: > >> Well, there i sno "wrong" time. There are just "different" times. The only >> thing git really tracks is not actually the time (that's purely for human >> consumption), but the *relationship* between commits. So git really very >> fundmanetally just tracks things like "commit X was the parent of commit >> Y", and the time is really immaterial. > > Is it possible for git and/or gitweb to know that commits X and Y are descendents of merge C and > use the time merge C happened locally for both instead of using the time commits X and Y were > created? git knows what's a decendent of what, but gitweb doesn't show it well. that's why Linus suggested you look at gitk or qgit. by the way, you probably mean that commits X and Y are parents of merge C, not decendants. but if git did what you wanted it would show every commit with the time of the merge, and that wouldn't help you anyway. > It seems to me changes showing up as being made long before they really were merged is a > very serious problem verification wise but if everyone is using git then perhaps it's not as bad > as I think. What happens when security bug fix Z errantly seems to be in v2.6.22 but in reality > its not? you don't look at the dates to see if the bugfix is in 2.6.22 you look at the graph or ask git to tell you remember that in git you don't have one-true-trunk of the project, you have a mesh of interconnected points, some of which are pointed to by tags that tell you that other people thought that they are particularly interesting. David Lang > Thanks for the responses, > -Matt > > > > ____________________________________________________________________________________ > Park yourself in front of a world of choices in alternative vehicles. Visit the Yahoo! Auto Green Center. > http://autos.yahoo.com/green_center/ > - > To unsubscribe from this list: send the line "unsubscribe git" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html > ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 1:11 ` Matthew L Foster 2007-07-30 1:27 ` david @ 2007-07-30 2:29 ` Linus Torvalds 2007-07-30 2:43 ` Matthew L Foster 2007-07-30 6:10 ` Steffen Prohaska 1 sibling, 2 replies; 44+ messages in thread From: Linus Torvalds @ 2007-07-30 2:29 UTC (permalink / raw) To: Matthew L Foster; +Cc: git On Sun, 29 Jul 2007, Matthew L Foster wrote: > > Is it possible for git and/or gitweb to know that commits X and Y are descendents of merge C and > use the time merge C happened locally for both instead of using the time commits X and Y were > created? The data exists, but there is nothing to make "C" special. Or rather, the two "sides" of C that got merged are 100% equivalent. You'd probably have to read a lot of old emails (from very early in the git process) to see the whole picture. But the fact is, in a distributed environment, the parents to a merge C are totally equivalent. So thus when you talk about merge new code into an old repository (and giving those new commits the same date as the merge), that is actually technically 100% equivalent to merging the other way around, and thus you'd have to give all the *old* commits that new merge date too! And yes, this does happen. It's not at all the case that I always merge other peoples tree: quite often other people merge _my_ tree, and the end result really is that they pulled in the changes _I_ had done. [ Side note: we do actually try to avoid that, just because it makes the history harder to read, and the resulting criss-cross merges, while technically not a problem at all, can confuse people. But when I say "try to avoid that", I mean just that: it's not a hard rule, and the reverse merging _does_ happen, and there are good reasons for why it happens. So *most* of the time, the history looks like it's me merging other peoples code, but then every once in a while, the merge is done by the other side. And from a pure technical standpoint, the two cases are totally equivalent, and git is very fundamentally designed to *not* care. ] So there is never really any way to say that one side of a merge is special. The closest you can get is saying - the first parent is special. This is "see merges from the viewpoint of the merger", but as mentioned, the person who actually did the merge isn't necessarily me, so while this is a totally self-consistent view, it's not really the view you are looking for. You can get some of this view by using "git log --first-parent", which basically follows commits preferentially using the first parent, and thus "prefers" history as seen by whoever did the merge. or - the *local* repository is special (but this is a purely repository- local viewpoint). This is what "reflogs" give you, and what "git log -g" shows. It shows the history not as it pertains to parenthood, but as the tip-of-tree has changed in *that* repository. but neither of those are really "sensible" (the first one will give *wildly* different results if the repository is ever "switched around" because it's not merged by a single person, and the second one is a purely local thing and has no meaning for anybody else. The fact is, distributed history isn't one-dimensional. You *cannot* linearize it as some one-dimensional time. Impossible. Any system that tries is broken. Fundamentally. Linus ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 2:29 ` Linus Torvalds @ 2007-07-30 2:43 ` Matthew L Foster 2007-07-30 3:06 ` Linus Torvalds 2007-07-30 6:10 ` Steffen Prohaska 1 sibling, 1 reply; 44+ messages in thread From: Matthew L Foster @ 2007-07-30 2:43 UTC (permalink / raw) To: Linus Torvalds; +Cc: git --- Linus Torvalds <torvalds@linux-foundation.org> wrote: > The fact is, distributed history isn't one-dimensional. You *cannot* > linearize it as some one-dimensional time. Impossible. Any system that > tries is broken. I don't want distributed history, I want what local time changes were merged locally. That is why I described a separate view for this feature, this feature request is not meant to replace how time is currently not being used. :) -Matt ____________________________________________________________________________________ Pinpoint customers who are looking for what you sell. http://searchmarketing.yahoo.com/ ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 2:43 ` Matthew L Foster @ 2007-07-30 3:06 ` Linus Torvalds 2007-07-30 3:16 ` Linus Torvalds 2007-07-30 3:57 ` Matthew L Foster 0 siblings, 2 replies; 44+ messages in thread From: Linus Torvalds @ 2007-07-30 3:06 UTC (permalink / raw) To: Matthew L Foster; +Cc: git On Sun, 29 Jul 2007, Matthew L Foster wrote: > > --- Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > The fact is, distributed history isn't one-dimensional. You *cannot* > > linearize it as some one-dimensional time. Impossible. Any system that > > tries is broken. > > I don't want distributed history, I want what local time changes were > merged locally. The point is, there is no "locally". Do you mean locally on my machine? That's actually *different* from the locally on the public machines, and no, I wouldn't give you that information anyway (since that information would include the mistakes that I fixed up ;) And in fact, even on the public machines, the "locally" would be different depending on things like mirroring delays, although that is currently hidden by the fact that kernel.org uses rsync for mirroring rather than using git natively. So in theory, we could pick one particular public kernel.org machine, and use the times as _that_ machine sees it, but the fact is, that isn't how git works. No normal git command will ever show you such a senseless ordering. I suspect that the closest you could get to what you want would be to actually run git-cvsserver on kernel.org to export the git data as "CVS" data, and then you could use a CVS client that gets a linearized model of history. That is, afaik, the only way to give you what you want. And quite frankly, I'd never ask the kernel.org maintainers to do something that perverse. You could ask them, and maybe they would do so out of some really perverse self-destructive death-wish, but quite frankly, you'd probably be better off setting up such a git->CVS gateway on some local machine yourself. Linus ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 3:06 ` Linus Torvalds @ 2007-07-30 3:16 ` Linus Torvalds 2007-07-30 4:13 ` Matthew L Foster 2007-07-30 11:33 ` Sean 2007-07-30 3:57 ` Matthew L Foster 1 sibling, 2 replies; 44+ messages in thread From: Linus Torvalds @ 2007-07-30 3:16 UTC (permalink / raw) To: Matthew L Foster; +Cc: git On Sun, 29 Jul 2007, Linus Torvalds wrote: > > So in theory, we could pick one particular public kernel.org machine, and > use the times as _that_ machine sees it, but the fact is, that isn't how > git works. No normal git command will ever show you such a senseless > ordering. So to be constructive, and just tell you what the *sensible* ordering is: - get a kernel git clone - do "git pull" to update it. - do gitk ORIG_HEAD.. to show what the new stuff is after each update, or do something like gitk v2.6.23-rc1.. to show what is new after -rc1 (or "gitk @{2.days.ago}.." to see what is new in _your_ tree in the last two days or whatever). No commit dates anywhere. Just commit relationships and your *local* views of time. (Sure, gitk will show you the commit dates too, but they aren't important, since they have no meaning as to whether a commit got merged into 2.6.23-rc1 or not). Linus ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 3:16 ` Linus Torvalds @ 2007-07-30 4:13 ` Matthew L Foster 2007-07-30 11:33 ` Sean 1 sibling, 0 replies; 44+ messages in thread From: Matthew L Foster @ 2007-07-30 4:13 UTC (permalink / raw) To: Linus Torvalds; +Cc: git --- Linus Torvalds <torvalds@linux-foundation.org> wrote: > (Sure, gitk will show you the commit dates too, but they aren't important, > since they have no meaning as to whether a commit got merged into > 2.6.23-rc1 or not). ____________________________________________________________________________________ Be a better Heartthrob. Get better relationship answers from someone who knows. Yahoo! Answers - Check it out. http://answers.yahoo.com/dir/?link=list&sid=396545433 ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 3:16 ` Linus Torvalds 2007-07-30 4:13 ` Matthew L Foster @ 2007-07-30 11:33 ` Sean 1 sibling, 0 replies; 44+ messages in thread From: Sean @ 2007-07-30 11:33 UTC (permalink / raw) To: Linus Torvalds; +Cc: Matthew L Foster, git On Sun, 29 Jul 2007 20:16:01 -0700 (PDT) Linus Torvalds <torvalds@linux-foundation.org> wrote: > gitk v2.6.23-rc1.. > > to show what is new after -rc1 (or "gitk @{2.days.ago}.." to see what > is new in _your_ tree in the last two days or whatever). It sounds like that would be the proper way to address the issue within Gitweb as well. Assuming the issue is users wanting to see changes since a specific release, offering a "Commits since tag" option or some such should resolve it. Sean ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 3:06 ` Linus Torvalds 2007-07-30 3:16 ` Linus Torvalds @ 2007-07-30 3:57 ` Matthew L Foster 1 sibling, 0 replies; 44+ messages in thread From: Matthew L Foster @ 2007-07-30 3:57 UTC (permalink / raw) To: Linus Torvalds; +Cc: git --- Linus Torvalds <torvalds@linux-foundation.org> wrote: > The point is, there is no "locally". > > Do you mean locally on my machine? That's actually *different* from the > locally on the public machines, and no, I wouldn't give you that > information anyway (since that information would include the mistakes that > I fixed up ;) Ok that explains it. How about locally on gitX.kernel.org [would have to be real git repository]? I'd want gitweb.cgi running on my local repository to use the local time of local merges to ensure the problem I described at the start of this thread doesn't happen. Git reset --hard can be used to fix mistakes and that wouldn't show? > And in fact, even on the public machines, the "locally" would be different > depending on things like mirroring delays Yes, it should be different, everyone's local commit/merge order is not the same. > So in theory, we could pick one particular public kernel.org machine, and > use the times as _that_ machine sees it, but the fact is, that isn't how > git works. No normal git command will ever show you such a senseless > ordering. Is local commit order really senseless? Using local commit order and/or the local time of local merges would solve the problem I mentioned in the start of this thread? I don't think this info has to be exported to CVS, a web interface to git and/or git itself should be able to tell us what local time order and/or what local commit order merges were made in. -Matt ____________________________________________________________________________________ Take the Internet to Go: Yahoo!Go puts the Internet in your pocket: mail, news, photos & more. http://mobile.yahoo.com/go?refer=1GNXIC ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 2:29 ` Linus Torvalds 2007-07-30 2:43 ` Matthew L Foster @ 2007-07-30 6:10 ` Steffen Prohaska 2007-07-30 6:48 ` Junio C Hamano 1 sibling, 1 reply; 44+ messages in thread From: Steffen Prohaska @ 2007-07-30 6:10 UTC (permalink / raw) To: Linus Torvalds; +Cc: Matthew L Foster, git On Jul 30, 2007, at 4:29 AM, Linus Torvalds wrote: > So there is never really any way to say that one side of a merge is > special. The closest you can get is saying > > - the first parent is special. > > This is "see merges from the viewpoint of the merger", but as > mentioned, the person who actually did the merge isn't > necessarily me, > so while this is a totally self-consistent view, it's not really > the > view you are looking for. > > You can get some of this view by using "git log --first-parent", > which > basically follows commits preferentially using the first parent, > and > thus "prefers" history as seen by whoever did the merge. In general the first parent is not special, agreed. But could one deliberately built a history by following certain rules that make the first parent _always_ a special one? I think of a quite simple example. Topic branches are always branched off the master, and later merged back. The master, which is the branch an official release is created from, must always be the first parent during a merge. It doesn't matter who does the merges or who does the releases, as long as he follows the rule to start from the last release point and merge in all changes in the appropriate way, such that the first parent rule is followed. Here are two applications that I think would be interesting: 1) The kernel history. If you went from a current release back along the first parents you'd see the changes that entered the official kernel sorted backwards in time. I believe the history of the kernel is already an approximation of this rule. But maybe I'm wrong. 2) Developing using topic branches. You start topic branches and start developing new features. Only later you fix problems on all supported platforms, polish and review the changes. Not every commit on the topic branch has the same quality, e.g. the early commits may not even compile on all supported platforms. But the tip of the topic branch passes all required tests. After a merge of the topic branch to a stable branch it would be nice to distinguish the stable history from the less polished commits on the topic branch. I think this could be achieved if the first parent always is linked to a stable commit. I'm sure some will propose that instead of (2) I should rewrite a topic branch such that every single commit passes all quality requirements. But I strongly believe it is a viable choice not to do so. It may just be too much work and often it's sufficient and easier to polish the tip of a topic branch. Fast-forward merges would break both of the scenarios. But would they be possible without fast-forward merges? Would it be possible to ensure that all commits along the first-parent-path have 'release' quality and all release tags are located along this path? What would be the right rules to achieve this objective? Steffen ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 6:10 ` Steffen Prohaska @ 2007-07-30 6:48 ` Junio C Hamano 2007-07-30 7:44 ` Steffen Prohaska 0 siblings, 1 reply; 44+ messages in thread From: Junio C Hamano @ 2007-07-30 6:48 UTC (permalink / raw) To: Steffen Prohaska; +Cc: Linus Torvalds, Matthew L Foster, git This is an old topic rehashed from time to time. The last time was March this year if I recall correctly. http://thread.gmane.org/gmane.comp.version-control.git/41931/focus=41983 I tend to agree that it would make sense to allow something like: $ git merge --no-fast-forward -m 'Merge topic XYZ' xyz but at the same time Linus is pretty clear that he would not use that for his kernel merges, so even if we add that feature, gitweb at k.org that shows linux-2.6 history would not see it. ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 6:48 ` Junio C Hamano @ 2007-07-30 7:44 ` Steffen Prohaska 2007-07-30 7:49 ` Shawn O. Pearce 0 siblings, 1 reply; 44+ messages in thread From: Steffen Prohaska @ 2007-07-30 7:44 UTC (permalink / raw) To: Junio C Hamano; +Cc: Linus Torvalds, Matthew L Foster, git On Jul 30, 2007, at 8:48 AM, Junio C Hamano wrote: > I tend to agree that it would make sense to allow something like: > > $ git merge --no-fast-forward -m 'Merge topic XYZ' xyz Another option could be to force a commit before the merge, even if there are no changes to commit, something like $ git commit --force -m 'MARK' [to my knowledge, --force or similar is not yet available] Steffen ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 7:44 ` Steffen Prohaska @ 2007-07-30 7:49 ` Shawn O. Pearce 2007-07-30 8:09 ` Steffen Prohaska 0 siblings, 1 reply; 44+ messages in thread From: Shawn O. Pearce @ 2007-07-30 7:49 UTC (permalink / raw) To: Steffen Prohaska; +Cc: Junio C Hamano, Linus Torvalds, Matthew L Foster, git Steffen Prohaska <prohaska@zib.de> wrote: > Another option could be to force a commit before the merge, even > if there are no changes to commit, something like > > $ git commit --force -m 'MARK' > > [to my knowledge, --force or similar is not yet available] git-force-commit: git config --global alias.force-commit \ '! git update-ref HEAD $(echo MARK | git commit-tree HEAD -p HEAD)' But you didn't hear it from me. ;-) Yes, I've actually done this once in a while. But only to create some temporary throw-away state that I need for some diff operation or whatnot. Usually because I make it in one repository, but want to fetch it into another and fetch likes moving refs to commits better than refs to trees. Oh, and I'm usually passing in more than one -p, and usually not HEAD as the tree. But whatever. -- Shawn. ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 7:49 ` Shawn O. Pearce @ 2007-07-30 8:09 ` Steffen Prohaska 2007-07-30 8:14 ` Jeff King 0 siblings, 1 reply; 44+ messages in thread From: Steffen Prohaska @ 2007-07-30 8:09 UTC (permalink / raw) To: Shawn O. Pearce; +Cc: Junio C Hamano, Linus Torvalds, Matthew L Foster, git On Jul 30, 2007, at 9:49 AM, Shawn O. Pearce wrote: > git-force-commit: > > git config --global alias.force-commit \ > '! git update-ref HEAD $(echo MARK | git commit-tree HEAD -p HEAD)' I needed to slightly modify it git config --global alias.force-commit \ '! git update-ref HEAD $(echo MARK | git commit-tree $(git cat- file commit HEAD | grep ^tree | cut -b 6-) -p HEAD)' > But you didn't hear it from me. ;-) I'll tell no-one ;) Steffen ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 8:09 ` Steffen Prohaska @ 2007-07-30 8:14 ` Jeff King 2007-07-30 8:24 ` Junio C Hamano 2007-07-30 8:25 ` Steffen Prohaska 0 siblings, 2 replies; 44+ messages in thread From: Jeff King @ 2007-07-30 8:14 UTC (permalink / raw) To: Steffen Prohaska Cc: Shawn O. Pearce, Junio C Hamano, Linus Torvalds, Matthew L Foster, git On Mon, Jul 30, 2007 at 10:09:16AM +0200, Steffen Prohaska wrote: > I needed to slightly modify it > > git config --global alias.force-commit \ > '! git update-ref HEAD $(echo MARK | git commit-tree $(git cat-file > commit HEAD | grep ^tree | cut -b 6-) -p HEAD)' How about "git commit-tree HEAD^{tree} -p HEAD"? But I think making a "fake" commit to force non-fast-forward is the wrong thing. You really want to make your "extra" commit be the merge that wouldn't have happened (which unfortunately is not as simple as just creating a commit by hand, since you have to actually _do_ the merge to get the tree). -Peff ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 8:14 ` Jeff King @ 2007-07-30 8:24 ` Junio C Hamano 2007-07-30 8:31 ` Jeff King 2007-07-30 8:25 ` Steffen Prohaska 1 sibling, 1 reply; 44+ messages in thread From: Junio C Hamano @ 2007-07-30 8:24 UTC (permalink / raw) To: Jeff King Cc: Steffen Prohaska, Shawn O. Pearce, Linus Torvalds, Matthew L Foster, git Jeff King <peff@peff.net> writes: > But I think making a "fake" commit to force non-fast-forward is the > wrong thing. You really want to make your "extra" commit be the merge > that wouldn't have happened (which unfortunately is not as simple as > just creating a commit by hand, since you have to actually _do_ the > merge to get the tree). I do agree that if you really want to create a commit instead of allowing a fast forward, you really should create a proper merge commit. But it is not hard. If it is a fast forward in reality but you are marking it as a real merge by creating a merge commit, then: - The tree is obviously the merged branch that is a fast forward of your old HEAD; - The first parent of the resulting merge is your old HEAD; and - The second parent of the resulting merge is the merged branch. So: git merge --no-fast-forward other when other is a fast forward of HEAD would do: git commit-tree other^{tree} -p HEAD -p other ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 8:24 ` Junio C Hamano @ 2007-07-30 8:31 ` Jeff King 0 siblings, 0 replies; 44+ messages in thread From: Jeff King @ 2007-07-30 8:31 UTC (permalink / raw) To: Junio C Hamano Cc: Steffen Prohaska, Shawn O. Pearce, Linus Torvalds, Matthew L Foster, git On Mon, Jul 30, 2007 at 01:24:43AM -0700, Junio C Hamano wrote: > But it is not hard. If it is a fast forward in reality but you > are marking it as a real merge by creating a merge commit, then: Of course, I was not thinking right. I was considering the difficulty of invoking the merge machinery, but of course by definition for a fast-forward you don't have to. > when other is a fast forward of HEAD would do: > > git commit-tree other^{tree} -p HEAD -p other Yes, that makes sense. -Peff ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 8:14 ` Jeff King 2007-07-30 8:24 ` Junio C Hamano @ 2007-07-30 8:25 ` Steffen Prohaska 2007-07-30 8:32 ` Jeff King 1 sibling, 1 reply; 44+ messages in thread From: Steffen Prohaska @ 2007-07-30 8:25 UTC (permalink / raw) To: Jeff King Cc: Shawn O. Pearce, Junio C Hamano, Linus Torvalds, Matthew L Foster, git On Jul 30, 2007, at 10:14 AM, Jeff King wrote: > > How about "git commit-tree HEAD^{tree} -p HEAD"? Thanks, I wasn't aware of this syntax. > But I think making a "fake" commit to force non-fast-forward is the > wrong thing. You really want to make your "extra" commit be the merge > that wouldn't have happened (which unfortunately is not as simple as > just creating a commit by hand, since you have to actually _do_ the > merge to get the tree). I agree. But I think except for being 'fake' there shouldn't be any problems with the extra commit. Steffen ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 8:25 ` Steffen Prohaska @ 2007-07-30 8:32 ` Jeff King 2007-07-30 8:34 ` david 0 siblings, 1 reply; 44+ messages in thread From: Jeff King @ 2007-07-30 8:32 UTC (permalink / raw) To: Steffen Prohaska Cc: Shawn O. Pearce, Junio C Hamano, Linus Torvalds, Matthew L Foster, git On Mon, Jul 30, 2007 at 10:25:25AM +0200, Steffen Prohaska wrote: > I agree. But I think except for being 'fake' there shouldn't be any > problems with the extra commit. Problems, no. But it will look ugly when browsing history. :) -Peff ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 8:32 ` Jeff King @ 2007-07-30 8:34 ` david 2007-07-30 8:41 ` Jeff King 0 siblings, 1 reply; 44+ messages in thread From: david @ 2007-07-30 8:34 UTC (permalink / raw) To: Jeff King Cc: Steffen Prohaska, Shawn O. Pearce, Junio C Hamano, Linus Torvalds, Matthew L Foster, git On Mon, 30 Jul 2007, Jeff King wrote: > On Mon, Jul 30, 2007 at 10:25:25AM +0200, Steffen Prohaska wrote: > >> I agree. But I think except for being 'fake' there shouldn't be any >> problems with the extra commit. > > Problems, no. But it will look ugly when browsing history. :) yes, but this entire thread was an attempt to avoid browsing the history and instead figure out the relationships between commits by dates. so the people wanting this don't care how ugly it makes the history (but since they want to do this in other people's repositories this won't work for them either) David Lang ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 8:34 ` david @ 2007-07-30 8:41 ` Jeff King 2007-07-30 17:42 ` Linus Torvalds 0 siblings, 1 reply; 44+ messages in thread From: Jeff King @ 2007-07-30 8:41 UTC (permalink / raw) To: david Cc: Steffen Prohaska, Shawn O. Pearce, Junio C Hamano, Linus Torvalds, Matthew L Foster, git On Mon, Jul 30, 2007 at 01:34:55AM -0700, david@lang.hm wrote: > yes, but this entire thread was an attempt to avoid browsing the history and > instead figure out the relationships between commits by dates. so the people > wanting this don't care how ugly it makes the history (but since they want > to do this in other people's repositories this won't work for them either) I think we drifted a bit from that with Steffen's original message... If you followed a strict policy of always merging topics to a "base" branch as your first parent, then never allowing fast forwards should allow a very easy-to-read history in gitk. The left-most line of commits would simply be a record of topics getting merged in, and would never contain any "non-base" commits. -Peff ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 8:41 ` Jeff King @ 2007-07-30 17:42 ` Linus Torvalds 2007-07-31 18:06 ` Steffen Prohaska 0 siblings, 1 reply; 44+ messages in thread From: Linus Torvalds @ 2007-07-30 17:42 UTC (permalink / raw) To: Jeff King Cc: david, Steffen Prohaska, Shawn O. Pearce, Junio C Hamano, Matthew L Foster, git On Mon, 30 Jul 2007, Jeff King wrote: > > If you followed a strict policy of always merging topics to a "base" > branch as your first parent, then never allowing fast forwards should > allow a very easy-to-read history in gitk. Only if only *one* person ever does any merges. Immediately when you have other people merging code, you're now back in the same boat. This is why I personally think the whole policy of "no fast forward" is totally broken. It's only usable in a non-distributed environment, where there is one central person who does everythng (a so-called "star topology"). Linus ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 17:42 ` Linus Torvalds @ 2007-07-31 18:06 ` Steffen Prohaska 2007-07-31 20:07 ` david 0 siblings, 1 reply; 44+ messages in thread From: Steffen Prohaska @ 2007-07-31 18:06 UTC (permalink / raw) To: Linus Torvalds Cc: Jeff King, david, Shawn O. Pearce, Junio C Hamano, Matthew L Foster, git On Jul 30, 2007, at 7:42 PM, Linus Torvalds wrote: > On Mon, 30 Jul 2007, Jeff King wrote: >> >> If you followed a strict policy of always merging topics to a "base" >> branch as your first parent, then never allowing fast forwards should >> allow a very easy-to-read history in gitk. > > Only if only *one* person ever does any merges. > > Immediately when you have other people merging code, you're now > back in > the same boat. > > This is why I personally think the whole policy of "no fast > forward" is > totally broken. It's only usable in a non-distributed environment, > where > there is one central person who does everything (a so-called "star > topology"). I think no fast forward merges can always provide useful information. Public releases are often created from a public, linear branch that is not arbitrarily jumping around. Even if more than one person creates such releases there must be some agreement upon the responsibility for the release and thus for the branch the releases are created from. If all agreed to merge topics following the "no fast forward" policy and to use the release branch as a first parent, the commits along the first parents would document how commits came into the release branch. Non fast forward merges would always document that a series of commits was added to the release branch at once at the (local time) of the merge commit. If fast forwards are allowed it depends on whether the release branch can be fast-forwarded over a series of commits on a topic branch or not. In case of fast-forward, the history makes you believe each of the commits of the topic branch entered the release branch separately. It hides that they were all merged at once. I think, avoiding fast forwards may also be used to document a different level of quality required from commits to a topic branch and from commits to the release branch. A the time of the merge the tip of a topic branch must fulfill all quality requirements, for example compile on all platforms and pass all tests. But this need not be the case for every single commit on the topic branch. If you avoid fast forwards you still get a chain of commits along the first parent that would fulfill your quality requirements. If you allowed a fast forward over a low quality topic branch your chain might be broken and you can't be sure, which commits will have high quality and which one have a lower quality. You may argue that this is all crap because every single commit should be of highest quality, but I think this is unrealistic. Especially if more than one person is jointly working on a topic branch and less experienced and more experienced developers work together. It may also be rational to first get the basic functionality right and later polish work for several platforms and usage scenarios. Obviously other techniques, like rewriting a topic branch to a perfect commit series may be used as well. But from my understanding this may be hard if more than a single person is involved. You could also squash the complete topic branch into a single commit but then valuable history might get lost. I don't see why what I have in mind would break if other people are merging code, too. They may or may not follow my local rules. But at the time of merging their changes, I can enforce my local quality policy and document this by create a merge commit. This could even be applied recursively. You could start to do a couple of merges but only thoroughly test the final result of the last merge. You could then enforce a link between the last very stable commit before you did all the merges and the very well tested result after the final merge by enforcing a "no fast forward" merge. I'm not quite sure if such a history would be useful in the long term or may just become to complex. I'm also not sure if the artificial links would cause any trouble. I'm wondering, for example, if there are any cases in which the additional links would make branching and merging harder. Steffen ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-31 18:06 ` Steffen Prohaska @ 2007-07-31 20:07 ` david 0 siblings, 0 replies; 44+ messages in thread From: david @ 2007-07-31 20:07 UTC (permalink / raw) To: Steffen Prohaska Cc: Linus Torvalds, Jeff King, Shawn O. Pearce, Junio C Hamano, Matthew L Foster, git main trunk is at commit X developer clones Y and adds a patch to it the merge from Y's tree to the main trunk is a fast-forward David Lang On Tue, 31 Jul 2007, Steffen Prohaska wrote: > Date: Tue, 31 Jul 2007 20:06:24 +0200 > From: Steffen Prohaska <prohaska@zib.de> > To: Linus Torvalds <torvalds@linux-foundation.org> > Cc: Jeff King <peff@peff.net>, david@lang.hm, > Shawn O. Pearce <spearce@spearce.org>, Junio C Hamano <gitster@pobox.com>, > Matthew L Foster <mfoster167@yahoo.com>, git@vger.kernel.org > Subject: Re: merge time > > > On Jul 30, 2007, at 7:42 PM, Linus Torvalds wrote: > >> On Mon, 30 Jul 2007, Jeff King wrote: >> > >> > If you followed a strict policy of always merging topics to a "base" >> > branch as your first parent, then never allowing fast forwards should >> > allow a very easy-to-read history in gitk. >> >> Only if only *one* person ever does any merges. >> >> Immediately when you have other people merging code, you're now back in >> the same boat. >> >> This is why I personally think the whole policy of "no fast forward" is >> totally broken. It's only usable in a non-distributed environment, where >> there is one central person who does everything (a so-called "star >> topology"). > > I think no fast forward merges can always provide useful information. > > Public releases are often created from a public, linear branch that > is not arbitrarily jumping around. Even if more than one person creates > such releases there must be some agreement upon the responsibility for > the release and thus for the branch the releases are created from. > > If all agreed to merge topics following the "no fast forward" policy and > to use the release branch as a first parent, the commits along the first > parents would document how commits came into the release branch. Non fast > forward merges would always document that a series of commits was added > to the release branch at once at the (local time) of the merge commit. > > If fast forwards are allowed it depends on whether the release branch can > be fast-forwarded over a series of commits on a topic branch or not. > In case of fast-forward, the history makes you believe each of the commits > of the topic branch entered the release branch separately. It hides that > they were all merged at once. > > I think, avoiding fast forwards may also be used to document a different > level of quality required from commits to a topic branch and from commits > to the release branch. A the time of the merge the tip of a topic branch > must fulfill all quality requirements, for example compile on all platforms > and pass all tests. But this need not be the case for every single commit > on the topic branch. If you avoid fast forwards you still get a chain of > commits along the first parent that would fulfill your quality requirements. > If you allowed a fast forward over a low quality topic branch your chain > might be broken and you can't be sure, which commits will have high quality > and which one have a lower quality. > > You may argue that this is all crap because every single commit should be > of highest quality, but I think this is unrealistic. Especially if more than > one person is jointly working on a topic branch and less experienced and > more experienced developers work together. It may also be rational to first > get the basic functionality right and later polish work for several platforms > and usage scenarios. > > Obviously other techniques, like rewriting a topic branch to a perfect commit > series may be used as well. But from my understanding this may be hard if > more > than a single person is involved. You could also squash the complete topic > branch into a single commit but then valuable history might get lost. > > I don't see why what I have in mind would break if other people are merging > code, too. They may or may not follow my local rules. But at the time of > merging their changes, I can enforce my local quality policy and document > this by create a merge commit. > > This could even be applied recursively. You could start to do a couple of > merges but only thoroughly test the final result of the last merge. You could > then enforce a link between the last very stable commit before you did all > the > merges and the very well tested result after the final merge by enforcing a > "no fast forward" merge. > > I'm not quite sure if such a history would be useful in the long term or > may just become to complex. I'm also not sure if the artificial links would > cause any trouble. I'm wondering, for example, if there are any cases in > which > the additional links would make branching and merging harder. > > Steffen > > ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-29 17:33 merge time Matthew L Foster 2007-07-29 23:19 ` Jakub Narebski 2007-07-29 23:35 ` Linus Torvalds @ 2007-07-30 12:44 ` Rogan Dawes 2007-07-30 16:14 ` Matthew L Foster 2 siblings, 1 reply; 44+ messages in thread From: Rogan Dawes @ 2007-07-30 12:44 UTC (permalink / raw) To: Matthew L Foster; +Cc: git Matthew L Foster wrote: > Sorry to bring up the time issue again [that I am perhaps still confused about] but I have been > playing around with git more and I think I can phrase my question/observation better. > > From viewing gitweb.cgi I have observed a situation where Linus creates a tag, say rc1, and then > he later merges changes but some subset of those changes/commits show up in the list in time order > as taking place _before_ the rc1 tag was made even though they were merged after. Do I describe a > real or possible phenomenon? And does this happen because the developer that made the subset of > changes in question commit them to his/her local repository in time order before the rc1 tag was > made? So an external repository had the change before the rc1 tag was made but Linus' repository > didn't? But internally git on Linus' machine knows that the gitweb.cgi displayed time order is > wrong as far as the state is concerned because each repository's index file keeps local track of > the true local state [just time isn't reconcilable], or am I missing something(s)? > > Is it possible for gitweb.cgi to have a new view mode that sorts/displays the list based on merge > time for commits (the time merged into Linus' or whatever repository) so the above situation > doesn't happen? The actual time of a local commit should be the time it was merged locally not the > time it was created externally/originally, right? Where can I find the gitweb.cgi source/package? > I could maybe hack gitweb.cgi myself. > > Please CC me on any replies since I am not subscribed to the list. > > -Matt The last time this topic came up, folks either created (or pointed to) reflogs as a way to determine the changes to the local state of a repo. i.e. by checking the reflog for a ref, you could say that that ref was changed from v2.6.20 to v2.6.21 at such and such date and time. That would allow you to determine what commits were available via that ref at a particular time, regardless of the actual commit dates. To the best of my knowledge, though, reflogs are not enabled by default on bare repos, and gitweb makes no use of the reflogs anyway. Rogan ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 12:44 ` Rogan Dawes @ 2007-07-30 16:14 ` Matthew L Foster 2007-07-30 16:20 ` Johannes Schindelin 2007-07-30 16:25 ` Rogan Dawes 0 siblings, 2 replies; 44+ messages in thread From: Matthew L Foster @ 2007-07-30 16:14 UTC (permalink / raw) To: Rogan Dawes; +Cc: git Maybe I am the only one that thinks the web interface should be just as feature rich as the command line interface? -Matt ____________________________________________________________________________________ Boardwalk for $500? In 2007? Ha! Play Monopoly Here and Now (it's updated for today's economy) at Yahoo! Games. http://get.games.yahoo.com/proddesc?gamekey=monopolyherenow ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 16:14 ` Matthew L Foster @ 2007-07-30 16:20 ` Johannes Schindelin 2007-07-30 16:24 ` Matthew L Foster 2007-07-30 16:25 ` Rogan Dawes 1 sibling, 1 reply; 44+ messages in thread From: Johannes Schindelin @ 2007-07-30 16:20 UTC (permalink / raw) To: Matthew L Foster; +Cc: Rogan Dawes, git Hi, On Mon, 30 Jul 2007, Matthew L Foster wrote: > Maybe I am the only one that thinks the web interface should be just as > feature rich as the command line interface? *lol* I would be _nice_. But frankly, how do you want to get the power of the command line into a website, _without_ reproducing a command line? I can _script_ the command line, for example. Ciao, Dscho ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 16:20 ` Johannes Schindelin @ 2007-07-30 16:24 ` Matthew L Foster 0 siblings, 0 replies; 44+ messages in thread From: Matthew L Foster @ 2007-07-30 16:24 UTC (permalink / raw) To: Johannes Schindelin; +Cc: Rogan Dawes, git --- Johannes Schindelin <Johannes.Schindelin@gmx.de> wrote: > > Maybe I am the only one that thinks the web interface should be just as > > feature rich as the command line interface? > > *lol* I would be _nice_. But frankly, how do you want to get the power > of the command line into a website, _without_ reproducing a command line? > I can _script_ the command line, for example. Creating a webified command line is a perfectly fine solution towards making gitweb.cgi as full featured as git is. -Matt ____________________________________________________________________________________ Shape Yahoo! in your own image. Join our Network Research Panel today! http://surveylink.yahoo.com/gmrs/yahoo_panel_invite.asp?a=7 ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 16:14 ` Matthew L Foster 2007-07-30 16:20 ` Johannes Schindelin @ 2007-07-30 16:25 ` Rogan Dawes 2007-07-30 17:06 ` Matthew L Foster 1 sibling, 1 reply; 44+ messages in thread From: Rogan Dawes @ 2007-07-30 16:25 UTC (permalink / raw) To: Matthew L Foster; +Cc: Git Mailing List Matthew L Foster wrote: > Maybe I am the only one that thinks the web interface should be just as feature rich as the > command line interface? > > -Matt > Well, having said that "Use reflogs" was the general response, I don't think that anyone ever really followed through and made it a readily accessible feature, even on the command line. That is, the reflogs are readily accessible, but noone made it possible to link them to the commits in such a way that the dates/times change as you seem to desire. Of course, you can do things like: $ git show HEAD@{2.days.ago} to see what HEAD looked like 2 days ago, but you can't do things like get gitk to show you that this tag only appeared in your repo 2 days ago. (Keep in mind, of course, that reflogs are referring to YOUR local copy of the git repo, not what HEAD was on the server that you cloned from.) And also keep in mind that on the command line you can invoke a lot of "plumbing commands" that you certainly wouldn't expect to be exposed in a web interface. Rogan ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 16:25 ` Rogan Dawes @ 2007-07-30 17:06 ` Matthew L Foster 2007-07-30 17:13 ` david 0 siblings, 1 reply; 44+ messages in thread From: Matthew L Foster @ 2007-07-30 17:06 UTC (permalink / raw) To: Rogan Dawes; +Cc: Git Mailing List --- Rogan Dawes <lists@dawes.za.net> wrote: > And also keep in mind that on the command line you can invoke a lot of > "plumbing commands" that you certainly wouldn't expect to be exposed in > a web interface. If the web interface requires logins over https why can't plumbing commands be exposed to the web? Though I agree not everything needs to be webified. What I envision is a wikipedia style interface front end with git remaining the backend so you can more easily browse the file system and see history and diff the way you can on Wikipedia. But that idea is very separate from my concern that right now gitweb.cgi effectively has a bug in it because it sorts using external/superset commit order/time rather than local commit order which causes changes to appear as if they were made before they were really merged locally. -Matt ____________________________________________________________________________________ Pinpoint customers who are looking for what you sell. http://searchmarketing.yahoo.com/ ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 17:06 ` Matthew L Foster @ 2007-07-30 17:13 ` david 2007-07-30 21:57 ` Jakub Narebski 0 siblings, 1 reply; 44+ messages in thread From: david @ 2007-07-30 17:13 UTC (permalink / raw) To: Matthew L Foster; +Cc: Rogan Dawes, Git Mailing List On Mon, 30 Jul 2007, Matthew L Foster wrote: > --- Rogan Dawes <lists@dawes.za.net> wrote: > >> And also keep in mind that on the command line you can invoke a lot of >> "plumbing commands" that you certainly wouldn't expect to be exposed in >> a web interface. > > If the web interface requires logins over https why can't plumbing commands be exposed to the web? > Though I agree not everything needs to be webified. What I envision is a wikipedia style interface > front end with git remaining the backend so you can more easily browse the file system and see > history and diff the way you can on Wikipedia. But that idea is very separate from my concern that > right now gitweb.cgi effectively has a bug in it because it sorts using external/superset commit > order/time rather than local commit order which causes changes to appear as if they were made > before they were really merged locally. what you are asking for would be a very useful piece of software, but that's very different from the current gitweb. you are fileing a bug about the software doing what it was designed to do. yes, it could be done differently. yes, that would be useful. but the software to do so is mostly a new product, not a simple tweak to the existing gitweb software. right now gitweb isn't designed for figuring out what was merged when, it's just for retreiving specific versions. if someone really wanted to do this, the right answer may be to take the concept of gitk and webify it (think SVG for the graphics and AJAX interfaces to retreive the info as needed). I think this would be a very useful tool, but it would be a lot of work to implement. but without the graph showing the commits and how they are related to each other, you really are crippled in your ability to figure out how things are related to each other. Date order just doesn't cut it. David Lang ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 17:13 ` david @ 2007-07-30 21:57 ` Jakub Narebski 0 siblings, 0 replies; 44+ messages in thread From: Jakub Narebski @ 2007-07-30 21:57 UTC (permalink / raw) To: git david@lang.hm wrote: > if someone really wanted to do this, the right answer may be to take the > concept of gitk and webify it (think SVG for the graphics and AJAX > interfaces to retreive the info as needed). I think this would be a very > useful tool, but it would be a lot of work to implement. > > but without the graph showing the commits and how they are related to each > other, you really are crippled in your ability to figure out how things > are related to each other. Date order just doesn't cut it. By the way, gitweb at repo.or.cz has graphical log (a la gitk) using git-browser by Arteem Khodush, which uses JavaScript library for graphics (creating lines box by box) and a bit of AJAX-ism. I was thinking about using "template" PNG with transparency and colored boxes to have lighter than git-browser graphical history in gitweb, but... By the way, you can try to add --topo-order support to gitweb, although I'm not sure if it would do what you want. -- Jakub Narebski Warsaw, Poland ShadeHawk on #git ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time
@ 2007-07-30 2:28 Matthew L Foster
2007-07-30 3:09 ` Linus Torvalds
0 siblings, 1 reply; 44+ messages in thread
From: Matthew L Foster @ 2007-07-30 2:28 UTC (permalink / raw)
To: git, david; +Cc: mfoster167
> but if git did what you wanted it would show every commit with the time of
> the merge, and that wouldn't help you anyway.
Actually that is exactly what I want. I want to know what local time change X and Y (and all
changes) were merged locally.
-Matt
____________________________________________________________________________________
Building a website is a piece of cake. Yahoo! Small Business gives you all the tools to get online.
http://smallbusiness.yahoo.com/webhosting
^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 2:28 Matthew L Foster @ 2007-07-30 3:09 ` Linus Torvalds 2007-07-30 4:10 ` Matthew L Foster 0 siblings, 1 reply; 44+ messages in thread From: Linus Torvalds @ 2007-07-30 3:09 UTC (permalink / raw) To: Matthew L Foster; +Cc: git, david On Sun, 29 Jul 2007, Matthew L Foster wrote: > > > but if git did what you wanted it would show every commit with the time of > > the merge, and that wouldn't help you anyway. > > Actually that is exactly what I want. I want to know what local time change X and Y (and all > changes) were merged locally. You misunderstand. It would do so both for the newly merged commits *and* for the old commits. Because _you_ think the "new" commits got merged, but it's logically exactly equivalent to saying that the *old* commits got merged. So now *every* single commit would get the timestamp of the merge. See? It would be pointless. Linus ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 3:09 ` Linus Torvalds @ 2007-07-30 4:10 ` Matthew L Foster 2007-07-30 4:17 ` david 0 siblings, 1 reply; 44+ messages in thread From: Matthew L Foster @ 2007-07-30 4:10 UTC (permalink / raw) To: Linus Torvalds; +Cc: git, david --- Linus Torvalds <torvalds@linux-foundation.org> wrote: > You misunderstand. It would do so both for the newly merged commits *and* > for the old commits. Because _you_ think the "new" commits got merged, but > it's logically exactly equivalent to saying that the *old* commits got > merged. > > So now *every* single commit would get the timestamp of the merge. > > See? It would be pointless. Ok maybe I am still confused. If a repository is in state A and a merge happens changing it to state B we can give the changes that got us to B the timestamp of the merge? Since the changes that got us from A to B were all merged locally at the same time they should be given the same timestamp, right? Please explain more about how changes/commits in state A would also be given the timestamp of the merge? When I say local time I also really mean local commit order as both should be interchangeable unless you widly misset/change your local clock. Git/gitweb could have an option to sort/display based on local commit order and maybe have check for if local time order is out of sync with local commit order. -Matt ____________________________________________________________________________________ Sick sense of humor? Visit Yahoo! TV's Comedy with an Edge to see what's on, when. http://tv.yahoo.com/collections/222 ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 4:10 ` Matthew L Foster @ 2007-07-30 4:17 ` david 2007-07-30 16:20 ` Matthew L Foster 0 siblings, 1 reply; 44+ messages in thread From: david @ 2007-07-30 4:17 UTC (permalink / raw) To: Matthew L Foster; +Cc: Linus Torvalds, git On Sun, 29 Jul 2007, Matthew L Foster wrote: > --- Linus Torvalds <torvalds@linux-foundation.org> wrote: > >> You misunderstand. It would do so both for the newly merged commits *and* >> for the old commits. Because _you_ think the "new" commits got merged, but >> it's logically exactly equivalent to saying that the *old* commits got >> merged. >> >> So now *every* single commit would get the timestamp of the merge. >> >> See? It would be pointless. > > Ok maybe I am still confused. If a repository is in state A and a merge happens changing it to > state B we can give the changes that got us to B the timestamp of the merge? Since the changes > that got us from A to B were all merged locally at the same time they should be given the same > timestamp, right? Please explain more about how changes/commits in state A would also be given the > timestamp of the merge? > > When I say local time I also really mean local commit order as both should be interchangeable > unless you widly misset/change your local clock. Git/gitweb could have an option to sort/display > based on local commit order and maybe have check for if local time order is out of sync with local > commit order. one feature of git (and I think of truely distributed change management systems) say you have tree A and I have tree B if you clone your tree and merge from mine, and I clone my tree and merge from yours, the result of both merges _must_ be the same there will be trouble when we both try and merge with tree C later on. another thing is that a given commit cannot be changed once it's created (if it was changed it wouldn't have the same sha1 value) so you can't just go around changeing dates on commits that took place elsewhere. David Lang ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 4:17 ` david @ 2007-07-30 16:20 ` Matthew L Foster 2007-07-30 16:23 ` david 0 siblings, 1 reply; 44+ messages in thread From: Matthew L Foster @ 2007-07-30 16:20 UTC (permalink / raw) To: david; +Cc: Linus Torvalds, git --- david@lang.hm wrote: > if you clone your tree and merge from mine, and I clone my tree and merge > from yours, the result of both merges _must_ be the same there will be > trouble when we both try and merge with tree C later on. > > another thing is that a given commit cannot be changed once it's created > (if it was changed it wouldn't have the same sha1 value) so you can't just > go around changeing dates on commits that took place elsewhere. Local commit order is stored locally right? From looking at gitweb on kernel.org it seems all the info is already there, a merge has a list of commits in that merge and they should be displayed in local commit order rather than external creation time order. -Matt ____________________________________________________________________________________Ready for the edge of your seat? Check out tonight's top picks on Yahoo! TV. http://tv.yahoo.com/ ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 16:20 ` Matthew L Foster @ 2007-07-30 16:23 ` david 2007-07-30 17:11 ` Matthew L Foster 0 siblings, 1 reply; 44+ messages in thread From: david @ 2007-07-30 16:23 UTC (permalink / raw) To: Matthew L Foster; +Cc: Linus Torvalds, git On Mon, 30 Jul 2007, Matthew L Foster wrote: > --- david@lang.hm wrote: > >> if you clone your tree and merge from mine, and I clone my tree and merge >> from yours, the result of both merges _must_ be the same there will be >> trouble when we both try and merge with tree C later on. >> >> another thing is that a given commit cannot be changed once it's created >> (if it was changed it wouldn't have the same sha1 value) so you can't just >> go around changeing dates on commits that took place elsewhere. > > Local commit order is stored locally right? not normally. you could enable reflogs and then mine through the reflogs to find the info, but it's not stored in any easy to access fashion. David Lang > From looking at gitweb on kernel.org it seems all the > info is already there, a merge has a list of commits in that merge and they should be displayed in > local commit order rather than external creation time order. > > -Matt > > > > > ____________________________________________________________________________________Ready for the edge of your seat? > Check out tonight's top picks on Yahoo! TV. > http://tv.yahoo.com/ > ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 16:23 ` david @ 2007-07-30 17:11 ` Matthew L Foster 2007-07-30 17:33 ` david 2007-07-30 22:11 ` Robin Rosenberg 0 siblings, 2 replies; 44+ messages in thread From: Matthew L Foster @ 2007-07-30 17:11 UTC (permalink / raw) To: david; +Cc: Linus Torvalds, git --- david@lang.hm wrote: > On Mon, 30 Jul 2007, Matthew L Foster wrote: > > Local commit order is stored locally right? > > not normally. you could enable reflogs and then mine through the reflogs > to find the info, but it's not stored in any easy to access fashion. Local merge order can be extracted from git? -Matt ____________________________________________________________________________________ Be a better Heartthrob. Get better relationship answers from someone who knows. Yahoo! Answers - Check it out. http://answers.yahoo.com/dir/?link=list&sid=396545433 ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 17:11 ` Matthew L Foster @ 2007-07-30 17:33 ` david 2007-07-30 22:11 ` Robin Rosenberg 1 sibling, 0 replies; 44+ messages in thread From: david @ 2007-07-30 17:33 UTC (permalink / raw) To: Matthew L Foster; +Cc: Linus Torvalds, git On Mon, 30 Jul 2007, Matthew L Foster wrote: > --- david@lang.hm wrote: > >> On Mon, 30 Jul 2007, Matthew L Foster wrote: >>> Local commit order is stored locally right? >> >> not normally. you could enable reflogs and then mine through the reflogs >> to find the info, but it's not stored in any easy to access fashion. > > Local merge order can be extracted from git? if you have reflogs enabled on your copy of the git repository then you can look at when things were merged into your copy. David Lang ^ permalink raw reply [flat|nested] 44+ messages in thread
* Re: merge time 2007-07-30 17:11 ` Matthew L Foster 2007-07-30 17:33 ` david @ 2007-07-30 22:11 ` Robin Rosenberg 1 sibling, 0 replies; 44+ messages in thread From: Robin Rosenberg @ 2007-07-30 22:11 UTC (permalink / raw) To: Matthew L Foster; +Cc: david, Linus Torvalds, git måndag 30 juli 2007 skrev Matthew L Foster: > > --- david@lang.hm wrote: > > > On Mon, 30 Jul 2007, Matthew L Foster wrote: > > > Local commit order is stored locally right? > > > > not normally. you could enable reflogs and then mine through the reflogs > > to find the info, but it's not stored in any easy to access fashion. > > Local merge order can be extracted from git? Well.. depending on what your definition of merge. Yes, probably. I dislike the term "merge" here, since no merges has to be involved, unless you include any pulled commit into the terms. Normally a merge is a commit with two or more parents. Fast forward merges are indistinguishable from normal commits. That aside, you *can* (usually) figure the time when a commit entered the repository by examining the reflog if the set of branches are reasonably stable The reflog gives the local time when a head was modified (old and new commit) so from there you can usually go backwards. *But* that road is full of pot holes. The reflog cannot per se tell when a commit entered the local repo, it can tell when it came into view as seen from a particular head. Looking from different heads may (will) give you different times. If the head that was used to pull the commit into the repo is deleted you will not be able to tell when the commit entered the repo, nor will you be able to tell whether you can tell that or not, since the reflog for that head is gone. The reflog doesn't list all commits, just changes to the head and it isn't necessarily linear either, ie. it may change backward in "time" forward or even to a completely separate set of commits. The reflog is text-only: .git/logs/<ref-name>, e.g. .git/logs/refs/heads/master so you can see for yourself. -- robin ^ permalink raw reply [flat|nested] 44+ messages in thread
end of thread, other threads:[~2007-07-31 20:08 UTC | newest] Thread overview: 44+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-07-29 17:33 merge time Matthew L Foster 2007-07-29 23:19 ` Jakub Narebski 2007-07-29 23:35 ` Linus Torvalds 2007-07-30 1:11 ` Matthew L Foster 2007-07-30 1:27 ` david 2007-07-30 2:29 ` Linus Torvalds 2007-07-30 2:43 ` Matthew L Foster 2007-07-30 3:06 ` Linus Torvalds 2007-07-30 3:16 ` Linus Torvalds 2007-07-30 4:13 ` Matthew L Foster 2007-07-30 11:33 ` Sean 2007-07-30 3:57 ` Matthew L Foster 2007-07-30 6:10 ` Steffen Prohaska 2007-07-30 6:48 ` Junio C Hamano 2007-07-30 7:44 ` Steffen Prohaska 2007-07-30 7:49 ` Shawn O. Pearce 2007-07-30 8:09 ` Steffen Prohaska 2007-07-30 8:14 ` Jeff King 2007-07-30 8:24 ` Junio C Hamano 2007-07-30 8:31 ` Jeff King 2007-07-30 8:25 ` Steffen Prohaska 2007-07-30 8:32 ` Jeff King 2007-07-30 8:34 ` david 2007-07-30 8:41 ` Jeff King 2007-07-30 17:42 ` Linus Torvalds 2007-07-31 18:06 ` Steffen Prohaska 2007-07-31 20:07 ` david 2007-07-30 12:44 ` Rogan Dawes 2007-07-30 16:14 ` Matthew L Foster 2007-07-30 16:20 ` Johannes Schindelin 2007-07-30 16:24 ` Matthew L Foster 2007-07-30 16:25 ` Rogan Dawes 2007-07-30 17:06 ` Matthew L Foster 2007-07-30 17:13 ` david 2007-07-30 21:57 ` Jakub Narebski -- strict thread matches above, loose matches on Subject: below -- 2007-07-30 2:28 Matthew L Foster 2007-07-30 3:09 ` Linus Torvalds 2007-07-30 4:10 ` Matthew L Foster 2007-07-30 4:17 ` david 2007-07-30 16:20 ` Matthew L Foster 2007-07-30 16:23 ` david 2007-07-30 17:11 ` Matthew L Foster 2007-07-30 17:33 ` david 2007-07-30 22:11 ` Robin Rosenberg
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).