{"id":19541432,"url":"https://github.com/ickk/diffwita","last_synced_at":"2026-05-15T10:38:10.048Z","repository":{"id":134717691,"uuid":"601879522","full_name":"ickk/diffwita","owner":"ickk","description":"proof of concept. Tutorialise git trees","archived":false,"fork":false,"pushed_at":"2023-02-16T21:31:43.000Z","size":46,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"dev","last_synced_at":"2025-01-08T18:45:30.963Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ickk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-02-15T02:38:23.000Z","updated_at":"2024-07-03T17:22:23.000Z","dependencies_parsed_at":"2023-06-02T19:15:31.010Z","dependency_job_id":null,"html_url":"https://github.com/ickk/diffwita","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ickk%2Fdiffwita","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ickk%2Fdiffwita/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ickk%2Fdiffwita/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ickk%2Fdiffwita/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ickk","download_url":"https://codeload.github.com/ickk/diffwita/tar.gz/refs/heads/dev","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240795168,"owners_count":19858758,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-11T03:10:28.560Z","updated_at":"2026-05-15T10:38:04.994Z","avatar_url":"https://github.com/ickk.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"This is a proof of concept.\n\nDiffwita\n---\n\nA (WIP) tool to turn a git tree into a tutorial. It's like a simple form of\n[*literate programming*](https://en.wikipedia.org/wiki/Literate_programming).\n\nThe way it works is you simply include markdown in your commit messages that\ndescribes the changes in that particular commit. Diffwita then turns it into a\nlovely document.\n\n![example image](image.png?raw=true)\n\n***Why?***\n- It's kind of silly.\n- Lets tutorials include a single source of truth for both the text of a\n  tutorial and the project the tutorial is building.\n- The audience can be sure that if they follow your tutorial, it will build\n  because you can't make a mistake or leave something out when the diff itself\n  constitutes the tutorial.\n- Readers can browse the change-log and directly relate the change with the\n  relevant section of the tutorial since the commit message includes the\n  tutorial.\n\n**To do:**\n- automatically build a table of contents, linkify headings, separate into\n  multiple pages.\n- create a markdown block that lets you specify where a particular file will\n  appear in the markdown.\n- use libgit2 instead of calling out to the system's git install.\n- probably should rewrite a bunch of it to take advantage of the templating\n  library I used instead of messing around so much with the markdown\n  processor.\n- make links to commit SHAs actually resolve properly.\n- syntax highlighting.\n\n**Notes:**\n- You almost certainly want to configure the repository with:\n  ```sh\n  git config --local commit.cleanup scissors\n  ```\n  which prevents git from removing your headings; `#` is a comment to git by\n  default, and gets removed from your commit messages.\n- If you want to create a section in your document with only text but no code\n  changes, the command you need is:\n  ```sh\n  git commit --allow-empty\n  ```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fickk%2Fdiffwita","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fickk%2Fdiffwita","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fickk%2Fdiffwita/lists"}