spesk1 afe1d2da3d Added link to view raw files 4 years ago
lib afe1d2da3d Added link to view raw files 4 years ago
tools 331a45688a Base, nothing functional 5 years ago
.gitignore 9f65c01dc7 Tidying up a bit 5 years ago ca59c476c6 Added the majority of basic features. Useful on a basic level now 5 years ago afe1d2da3d Added link to view raw files 4 years ago
config.default 3b9e66f00f Display configured clone interface 5 years ago
gsg 399f604ba9 Added timer and detection of binary files 5 years ago 82221df19f Basics of data gathering done. Need to redo all HTML writing still 5 years ago

git-site-gen AKA gsg

Design Goals

  • General purpose/easy to use
  • Easy to hack/customize
  • Small library dependency footprint



  • Generate top level index with links to all projects
  • Generate project specific index with links to git log/diffs and file content of repo
  • Extremely basic markdown parser (only supports headings, non nested bullets, backticks code blocks, links and strikethru)
  • Line numbers for file browsing
  • Diff highlighting for log
  • Show git:// address for cloning (configurable via config file)
  • Support detection of misconfig of config file (pretty basic at this stage)
  • Detects binary files
  • Show last time site was generated in top level index
  • Links to view raw files (cannot be used with cURL as pages are rendered as HTML)


  • User-agent detection for curl http://link | bash use cases (stretch)
  • Code needs to be more robust / handle failure cases
  • Need to recurse git home, right now will only pull dirs in root of git home
  • markdown renderer/parser / display in project index (Partially implemented)
  • HTML based syntax highlighting for files
  • File history
  • Display/browse branches
  • More efficient/faster detection of binary files


  • gsg -- Perl script to generate the site, uses modules below
  • -- module to assemble data structures from git trees that need to be obtained as part of generating the site
  • -- probably a bad name, used for writing HTML files and/or editing text in other data structures with html content
  • -- module for parsing markdown. Likely a fools errand to be writing this myself but I'd like to try
  • -- module to parse gsg config, might be overkill to have it's own module
  • gsg.config -- Config file that gsg reads to inform behavior (git repos dir, what to include/exclude, etc)


How to use

  1. Clone this repo and run the install script ( must have also cloned/installed aforementioned Shellex dep )
  2. Edit the config file with your desired params or create one and pass it in with gsg --config-file $path_to_config , delete any that you are not using
  3. Run ./gsg


Reach out to me at via email at pm dot me, spesk@. If it turns out that people actually want to use this I'll move it to another git host that provides more features for a collaborative workflow.


GPLv3 - see