Skip to main content

Git Railway

Visualise local git branches as neat interactive HTML pages

         

GitHub Actions: Tests PyPI LICENSE

Installation • Usage • Details

Git Railway Example

Installation

Git Railway is available from PyPI

pip install git-railway

Usage

Navigate to a git repository, or any sub-folder, and run

git-railway

Your railway graph will be generated in railway.html. Use the -o or --output option to override the default location, e.g.

git-railway --output /tmp/mytemprailwaygraph.html

If you want to include all the remote branches to the railway graph, you can pass the -a or --all option, e.g.

git-railway --all

If the remote repository is hosted on GitHub, issue and PR references are replaced with actual links. If the GitHub slug derived from the remotes is wrong, you can override it with the --gh option, e.g.

git-railway --gh p403n1x87/git-railway

Details

There's no such thing as branch in Git!

As you probably know already, a branch in git is a mere reference (or label) that moves with every new commit. As such, it's hard if not impossible to reconstruct the actual branch from the information available from within a git repository. This tools works by looking at the current local refs and collecting all the commits that can be reached from them. The "branches" are the reconstructed "best effort" by looking at the reflog to determine on which commit a certain ref has been on. Sometimes this information is missing. For example, when one does a merge by fast-forwarding, all the intermediate commits are not marked with the ref of the target branch. Should they be part of the branch or not? Whenever you see a piece of grey rail in the graph, that's where the ref information is missing.

Chrono-topological ordering

To complicate things even more, there can be cases where a parent commit has a timestamp which is in the future with respect to some of its children. Hence, the trivial chronological ordering does not always work. Furthermore, one can also have precision issues; if one creates multiple commits in quick succession, they are likely to end up having the same timestamp. Topological order, on the other hand, is not optimal either in its own. For what if we have some stale branches that were never merged? They might end up at the very top of the graph, even though its commits are quite old.

The solution is a mix of chronological and topological sorting. For example, we can start by sorting all the commits based on their timestamp, and then make some changes to Kahn's algorithm to ensure that we position oldest commits first. With the chronological sorting step at the beginning, the complexity is O(n log n).

Metadata

Release files for git-railway 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for git-railway 0.2.1
File Size Uploaded
git-railway-0.2.1.tar.gz 26.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for git-railway 0.2.1
File Interpreter ABI Platform
git_railway-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 55.7 kB

Release files / git-railway-0.2.1.tar.gz

Download URL git-railway-0.2.1.tar.gz
Size 26.8 kB
Tags Source
SHA-256 checksum
How to use checksums
a5e6674c73eb5d67e884b5dd489d294a0a45af420366abf4ee3c97160267c7a8
BLAKE2b-256 checksum
How to use checksums
24bf87a12ae9194156deb9b8e535bd65c2466a8e12f40a5e6b7606b16f292ed8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.5 CPython/3.8.6 Linux/5.4.0-1026-azure

Release files / git_railway-0.2.1-py3-none-any.whl

Download URL git_railway-0.2.1-py3-none-any.whl
Size 28.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
8c20bca062ff456ef61ebbc0b4a88f373d173279bb9fac529b89c7f61100a74c
BLAKE2b-256 checksum
How to use checksums
b8fddf805b1c11bb3fda6bee18738c14d81a036c2cdac9d70dfac3adb7fb7325
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.0.5 CPython/3.8.6 Linux/5.4.0-1026-azure

Release history Release notifications | RSS feed

0.3.0

2 release files

0.2.2

2 release files

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page