# repo2html A command-line tool that generates a static HTML representation of a Git repository. ## Page contents - [Features](#features) - [Requirements](#requirements) - [Usage](#usage) - [Installation](#installation) - [Configuration](#configuration) - [Templates](#templates) - [Environment variables](#environment-variables) - [Creating a Git forge on your web server](#creating-a-git-forge-on-your-web-server) - [Alternative Git-to-HTML tools](#alternative-git-to-html-tools) - [Existing Git forges](#existing-git-forges) - [Existing Git forge software](#existing-git-forge-software) - [Todos](#todos) ## Features - Static html files - Customizable templates - Can be used as a standalone command-line tool, or in a Git hook - Built-in, plaintext issue support - Image support - Markdown files are rendered as HTML - No resident background process ## Requirements - [Chicken Scheme](https://call-cc.org/) - The following Chicken Scheme eggs: - [clojurian](https://wiki.call-cc.org/eggref/5/clojurian) - [ersatz](https://wiki.call-cc.org/eggref/5/ersatz) - [lowdown](https://wiki.call-cc.org/eggref/5/lowdown) - [scss](https://wiki.call-cc.org/eggref/5/scss) - [srfi-1](https://wiki.call-cc.org/eggref/5/srfi-1) - [srfi-13](https://wiki.call-cc.org/eggref/5/srfi-13) - [srfi-14](https://wiki.call-cc.org/eggref/5/srfi-14) - [sxml-transforms](https://wiki.call-cc.org/eggref/5/sxml-transforms) - [symbol-utils](https://wiki.call-cc.org/eggref/5/symbol-utils) - [utf8](https://wiki.call-cc.org/eggref/5/utf8) - Git ## Usage repo2html Run `repo2html` inside the root directory of a Git repository or a bare Git repository. - `` is the path to the directory that you want the HTML files to be generated in. - `` is the path to the directory that contains a `default.html` file. Refer to `assets/templates/default.html` for an example `default.html` file. The HTML that's generated represents the state of the `HEAD` commit, not the current state of the work tree. ## Installation This section guides you through installing the required dependencies, compiling a binary, and then installing the binary. By default, `repo2html` installs into the `/usr/local/bin` directory. 1. Ensure you're in the `repo2html` git repository. 2. As root, run `make dependencies` to install the required Chicken Scheme eggs. 3. Run `make` to compile a static `repo2html` binary in the current directory. 4. As root, run `make install` to copy the `repo2html` binary into the `/usr/local/bin` directory. **Note**: If you want to use `main.scm` as the `repo2html` executable, instead of compiling a static binary file, then run `cp main.scm /usr/local/bin/repo2html` as root. ## Configuration You can `repo2html` by changing the following items: - [Templates](#templates) - [Environment variables](#environment-variables) ### Templates You can customize `repo2html` by editing the `assets/templates/default.html`, and then specifying the path to the `default.html` file as the second command-line argument when running `repo2html`. For example, if you placed a `default.html` file in `~/bin`, and you serve HTML files from `/var/www/git`, then you run `repo2html /var/www/git ~/bin`. ### Environment variables You can provide a generic description by setting the `REPO2HTML_DESCRIPTION` environment variable, or by adding a description in a `description` file in the root directory of your Git repository. ## Creating a Git forge on your web server Refer to [Create a Git forge with repo2html](html/documentation/create-a-git-forge-with-repo2html.md.html) to learn how use `repo2html` in a `post-receive` hook to auto-generate HTML representations of bare Git repositories on a remote web server after you `git push` to them. ## Alternative Git-to-HTML tools - [stagit](https://codemadness.org/git/stagit/file/README.html) - [depp](https://git.8pit.net/depp.git/) - [git-arr](https://blitiri.com.ar/p/git-arr/) ## Existing Git forges - [NotABug](https://notabug.org/) - [Codeberg](https://codeberg.org/) - [sourcehut](https://sourcehut.org/) - [GitLab](https://gitlab.com/) - [Bitbucket](https://bitbucket.org/product/) - [SourceForge](https://sourceforge.net/) - [GitHub](https://github.com/) - [pagure](https://pagure.io/pagure) ## Existing Git forge software - [GitLab](https://about.gitlab.com/install/) - [Gogs](https://gogs.io/) - [Gitea](https://gitea.io/) - [cgit](https://git.zx2c4.com/cgit/) - [GitWeb](https://git-scm.com/book/en/v2/Git-on-the-Server-GitWeb) - [legit](https://git.icyphox.sh/legit) - [gitile](https://git.lepiller.eu/gitile) - [pagure](https://pagure.io/pagure) ## Todos - **documentation/feature**: use post-update rather than post-receive hook for simplicity - **documentation**: also describe use with post-commit hook - **documentation**: describe readme, license, and issues behaviours - **feature**: multi-page or collapse-able files list - **feature**: branches and releases (tags) - **feature**: diffs for each commit - **feature**: clickable line numbers in source files - **feature**: display binary files as output from binary-file analysis tools like `hexdump`, `xxd`, `dumpelf`, `elfls`, `readelf`, etc.? - **feature**: syntax highlighting? - **feature**: markdown-render git log text - **feature**: other mechanisms for header id application like uniqueness checking, sequential numbering - **feature**: remotes, upstream identification, and tracking branch status