-
Notifications
You must be signed in to change notification settings - Fork 402
RFC for Interactive Log View #1419
base: master
Are you sure you want to change the base?
Conversation
* The `github:log` command in the command palette. | ||
* An "Open Log" menu item in the context menu on the recent commit history. | ||
|
||
When launched, the log view pane uses WebGL to render a 3D model of your commit graph. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@smashwilson Do you have an example of a 3D log visualization or is it something that only exists in your imagination. π
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Totally and completely in my head π
If I get a chance, I might start playing around with a prototype for this to see if it's viable.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
On a semi-related note, I met some guys who made a git branch viewer for the hololens (it would display the branch graph fixed in space). So I guess that's one realization of a 3D log visualisation
|
||
## Motivation | ||
|
||
Visualizing the commit graph is an important tool for learning git. A live view of the commit graph can inobtrusively help git newcomers form the correct mental model for commit graph operations (branching, merging, rebasing). |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
"inobtrusively" -> "unobtrusively"
This sounds like a really interesting idea for seeing things immediately around where you are right now, but how will it handle large repositories? hundreds of commits? thousands? millions? |
Scaling up and still being useful is the big challenge in my mind, yeah - to the point that I don't think any existing tool, including I was hopeful that these would help:
But it's a big problem which will likely have a long tail of trial and error. I was hoping to track down a few example repositories (torvalds/linux, etc) that would push the limits and see how quickly performance and understandability degrade. |
Is there a reason to have this here instead of in the git package? The reason I ask is it applies equally (except for PR features) to git projects hosted elsewhere (or not hosted at all), and I'd really like to see this usable for github enterprise (we're still not there yet with this package). |
Yes. There is no git package π The package in this repository includes both git and github panels. |
* Each commit is rendered as a sphere, possibly with adjacent text (see below). | ||
* A line joins each commit to its parent. | ||
* Refs are rendered as rectangular tags attached to the relevant commits. | ||
* When a remote is present, commits that are not reachable from any remote ref are rendered _[TODO]_. Commits that have been fetched but are not reachable from any local ref are rendered _[TODO]_. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
There's basically 2 pieces of information you want to convey (preferably visually and at a glance) here:
- Local, remote, or both
- which remote(s)
My initial thought (assuming this view has a strong sense of up and down) is that local only commits are rendered as a pyramid (pointing up, which mildly indicates push). Remote only commits are rendered as an inverted pyramid (pointing down, which mildly indicates pull). Any commit that is both local and remote will be a sphere.
My idea for indicating which remote/remotes a commit is part of is to render an icon within the pyramid/sphere for each remote a commit is part of. We could use a house icon for origin, and a wavy (diagonal upwards) icon for upstream. Maybe basic geometric shapes (square, circle, triangle, star) for any other remotes. Local in this case is signified by the absence of an icon, or possibly by a computer.
If you give each remote its own color, then you could mix the colors to determine the color of the sphere/pyramid. Maybe local only is gray, origin is green, upstream is blue, etc. Then upstream and origin would be cyan/teal (mix of blue and green), etc.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This scheme works well with the levels of detail. Highest level of detail lets you hover the remote icons to see the names for the remotes, or maybe even pops them out to the left side with names. Medium level of detail lets you see the icons, but maybe smaller, or maybe only the first remote. Low level of detail has no icons, but retains the shape and color, so you can visually see if there's a "far away" commit that hasn't been pushed yet.
When launched, the log view pane uses WebGL to render a 3D model of your commit graph. | ||
|
||
* Each commit is rendered as a sphere, possibly with adjacent text (see below). | ||
* A line joins each commit to its parent. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
parent(s)*
merge commits have two (or more, in the case of an octopus merge) parents.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Merge commits actually have as many parents as needed. Two is just the most common.
Starting to write down my thoughts around this. Highly incomplete.
β‘ π¨ rendered π¨ β‘