On Sun, 12 Aug 2007, Linus Torvalds wrote: > > A newsreader is mis-designed for all the same reasons SVN is misdesigned: > it sees the messages (commits) as a _tree_. Side note: the lack of this bug is what makes showing large histories graphically be expensive in the first place. In fact, in git, merges are "first-class" entities, and forking is something you have to infer from the history (by finding two commits with the same parent), and that's why calculating the graph is actually pretty expensive: when you do so, you have to keep all the commit relationships in memory, and you basically have to sort it topologically. So even if you don't want to show the graph itself (and just add references to allow the user to walk to parents/children manually), you'd still have to calculate - and keep track of - the commit relationships. And I suspect that's what makes gitk and other visualizers take time. I think one solution is to limit the size fo the visualization by date or number, ie if you want to see history, it's often useful to do things like gitk --since=10.weeks.ago to see just the "recent" commits. That very fundamentally makes the problem much cheaper, because you simply have to generate the graph for a much smaller set of commits. I used to think that we should just default to some reasonable value, but then we optimized the hell out of git-rev-list and Paul fixed a number of scalability issues in gitk too, so it kind of fell by the wayside because it wasn't as important any more. But if you have a huge project with lots of history, the right answer may well be to make gitk *default* to using something like "show only the last year unless some revision limiting has been done explicitly". IOW, showing the whole history for a big project is simply pretty expensive. If you have a hundred thousand commits, just keeping track of the tree structure *is* going to take megabytes and megabytes of data. Limiting the size of the problem is usually a really good solution, especially since most people tend to care about what happened in the last few days, not what happened five months ago. Linus - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html