Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Show HN: An interactive visual history of Git development (jpalmer.dev)
147 points by jwpalmer6 on June 30, 2021 | hide | past | favorite | 22 comments


OP here.

I wrote up some additional details on how this was created on my blog: https://jpalmer.dev/2021/05/interactive-git-history/.

If anyone has ideas about milestones that I could add to that would make the timeline more interesting/informative, or any other feedback, please let me know.

Happy to answer any questions here.


After a user clicks on the streamgraph, the bottom-left displays information about commits by the corresponding contributor in the corresponding quarter; the contributor name is already a link to their GitHub profiles, but the "changes" count could also be made a link to the actual commits.

These links would have the format:

https://github.com/git/git/commits?author=gitster&since=2005...

or

https://github.com/git/git/commits?author=gitster@pobox.com&...


Oh that's a good idea. Thanks!


This is really cool. I started a project in a similar vein a few years back that I loosely called "What Did I Do" that would allow you to track blame / "ownership" over time. I could write out content to the command line, but once it got to the point of starting to put visualizations into the browser (in fact, I also went the D3 route), I started to lose drive. Finding a way to make it visually appealing escaped me - but you've captured it well here, I think. With the work you've done, can you also represent other repositories, or is this heavily focused on the Git repo specifically?


Thanks!

Yes, it's pretty heavily focused on the git repository, but it could be applied to other repositories with a little difficulty, and with mixed results. The main issues would be:

1. Getting the data. Currently a script needs to be run over the contents of a git repository to gather all of the commit data that's required. GitHub's API for commit data wouldn't allow all of the necessary data to be retrieved in a timely fashion, so that needs to be processed offline.

2. Cleaning the data. In order to link to github accounts I had to manually align commit author data to github profiles, which I wanted to do for this project because seeing a person's profile helped link the effort to the individual. You could throw that away for a different repository, I suppose, and just show the commit author information.

3. Creating milestones. The git milestones are mostly handcrafted (linking to release notes where they exist, etc), so they'd need to be replaced with something that could be generated from the repository or from some other process.

That said, I do think that it would be interesting to see other repositories in this style. I tried a couple of others just to see the basics, but the results were underwhelming because the structure of the visualizations depends so greatly on activities of the contributors.

Would you use it on other repositories if you could? Which repositories would be interesting to you?


1. That's basically what I wrote :) although I collected different info. It can be really time intensive for bigger / older repositories...

2. Just going off commit author / email (and then corresponding gravatar) seems like enough. I get hand tailoring for something like this, but for a more "general purpose / throw a repo at me and I'll figure it out," I think using whatever you get is ok

3. Could try using tags for this, or I think specifically from Github, milestones / releases are stored differently? Don't know. I feel like this could also be an "include if present or ignore," although I do appreciate how it breaks up the history into a timeline

I don't have any specific projects in mind - for my own playing, I just used my own personal / work repos that I had available on my computer. I think the bigger, popular projects like Angular, React, or even language projects .NET Core or TypeScript could be interesting. I don't know if they would make great graphs or not though, I imagine it would be largely trial and error.


Neat! Thanks for sharing.

>Note: This visualization was designed for screens larger than 1024 x 1024 and for desktop-style interactions.

Why am I getting this warning on my 4K UHD display? Both Firefox 89 and Chrome 91 on Ubuntu.


Because I am terrible at making CSS do what I want, unfortunately.

Seriously, though, I think I do some type of aspect ratio check - maybe that's the culprit.


Ah, so not sure how you're checking, but it looks like your thresholds might be just too aggressive: it looks like my window.innerHeight < 1024 [1] and that's probably triggering the warning.

[1]: https://developer.mozilla.org/en-US/docs/Web/API/Window/inne...


I love such visualizations, nice work! Does this work for any git repository?

Btw. for a visualization of all the git line endings settings, you might find this tool helpful: https://hediet.github.io/git-line-endings/ (just finished this tool this week)


My main takeaway is that Junio Hamano is supernaturally productive, and Git owes him a lot.


Here's his contribution in the last 5 years

https://public-001.gitsense.com/insights/github/repos?p=comm...

Disclaimer: I'm the creator of the tool that is linked.


Shawn Pearce gave him a good run for his money in 2007. If you've ever used git's auto complete in bash, that's his.


Wow, from the data viz perspective this is super impressive. The amount of data you managed to display and how you organized it is very impressive.

Maybe it's the amount of information, but I don't really know what to make of all that data. What conclusions did you arrive to? Where would you point someone like me who feels overwhelmed with all the information on screen?

And finally, do you see yourself turning this into a more generic visualization tool for git repos in general?


Thanks!

I had two goals (at least) in mind while making this:

1) Experiment with some visualization approaches that I hadn't tried before. The annotated streamgraph, etc. 2) Tell the story of the history of git as a way to demonstrate just how many contributions go into complex open source software.

I definitely got what I wanted out of the experience for the first goal - a large project like this (for me) taught me a lot about how to approach and structure this type of effort, and the limits of some of the technologies that I used.

Regarding the second goal, I had wanted to layer on more of a narrative (using some type of scrollytelling or something similar), but I ended up realizing that that was going to be too difficult with the structure that I had created, so I ended up adding the annotations and leaving some of the narrative reconstruction up to the viewer. If I were to go back to this work, that's what I would try to refine.

In terms of open source, I will do that but haven't yet because things are a bit of a mess and I was honestly tired of looking at it. I'll probably go back to that in a bit.

Applying this to another repository in its current state would require a decent amount of manual data extraction/cleaning, but it's possible. I'm not convinced the results would be that interesting, however. I tried it myself as an experiment and was surprised how linear/regular some of the other repos were.


OP here again. I forgot to mention that, because of my background in software development, I often create visualizations that are based on data from the development process. I find it to be a fascinating source of raw data that is underrepresented in the broader visualization space.

I don't have any type of newsletter, but I do announce new projects on twitter: https://twitter.com/jeffpalmer


I know there was a warning in the beginning, but with my laptop the text was so small that it rendered the whole thing useless. Zooming didn't help either.

I am sure this is great work but I just cannot access it.


Sorry about that! Getting this into a really amazing responsive state was beyond my abilities. Plus I developed it on 4K display, so I probably accidentally made things challenging on smaller displays. I’m definitely going to take mobile into consideration from the beginning on my next project.


It is small for the laptop screens too. Like letters are unreadably little.


This is awesome! Would it be possible to make this for other repos as well, such as Go language, or Kubernetes? Do you have a plan to extract a reusable foundation out of this project?


Anyone have any details on the 'Most line changes in a single month' event last October? Some sort of mass refactoring? Pretty cool way to display this info, thank you.


Thanks!

Those milestone callouts are based on aggregate statistics for that month, so that's a combination of a number of changes.

Most of the large changes that you see in the latter years of the project are the result of translation efforts. For example, this is from October: https://github.com/git/git/commit/c8774d0670b62447ae344d89a3...




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: