{"id":22269418,"url":"https://github.com/tommorris/branchsync","last_synced_at":"2026-05-04T21:32:57.332Z","repository":{"id":66246376,"uuid":"457010356","full_name":"tommorris/branchsync","owner":"tommorris","description":"A tool for keeping Git commits and GitHub PR descriptions synced","archived":false,"fork":false,"pushed_at":"2022-09-14T09:41:08.000Z","size":10,"stargazers_count":1,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-22T22:35:53.675Z","etag":null,"topics":["crystal-lang","git","github"],"latest_commit_sha":null,"homepage":"","language":"Crystal","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tommorris.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2022-02-08T16:20:40.000Z","updated_at":"2022-06-03T19:31:48.000Z","dependencies_parsed_at":"2023-07-21T03:46:23.729Z","dependency_job_id":null,"html_url":"https://github.com/tommorris/branchsync","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/tommorris/branchsync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tommorris%2Fbranchsync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tommorris%2Fbranchsync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tommorris%2Fbranchsync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tommorris%2Fbranchsync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tommorris","download_url":"https://codeload.github.com/tommorris/branchsync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tommorris%2Fbranchsync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32626052,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"ssl_error","status_checked_at":"2026-05-04T10:08:02.005Z","response_time":58,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["crystal-lang","git","github"],"created_at":"2024-12-03T11:16:24.130Z","updated_at":"2026-05-04T21:32:57.328Z","avatar_url":"https://github.com/tommorris.png","language":"Crystal","funding_links":[],"categories":[],"sub_categories":[],"readme":"# branchsync\n\nbranchsync seeks to solve a boring but simple problem faced by the working\ndeveloper.\n\n1. You write some code on a branch.\n\n2. You push that branch up to a Git host (GitHub, GitLab, etc.). If you're\n   using GitHub, this means you've reformatted your commit message from being\n   split on 74/80-ish lines because otherwise your newlines get preserved in the\n   HTML that gets outputted because GitHub doesn't follow the spec.\n   (see [§6.8 CommonMark](https://spec.commonmark.org/0.30/#soft-line-breaks))\n\n3. You create a pull request, merge request or whatever the equivalent is\n   called.\n\n4. You work on that code some more, and modify the commit message. (You're\n   rebasing and ensuring everything's one commit, right?)\n\n5. Now your pull request is out-of-sync with the commit message. The single\n   source of truth becomes multiple sources of irritation.\n\nIt does this by automating a process that is often done manually by developers,\nand then shelling out to the various command line utilities (e.g. `gh` for\nGitHub and `pandoc`).\n\n## Installation\n\nYou'll need `gh` (the [GitHub CLI](https://cli.github.com/)) and\n[Pandoc](https://pandoc.org/) installed. And `git` obviously, but that should\nbe fairly self-apparent.\n\nCurrently, you'll need to manually compile branchsync. At some point, we can\nset up CI to cross-compile new releases.\n\n## Usage\n\nCurrently, you just run `branchsync`. If there's a problem, it should fail out\nwith a fairly self-explanatory error.\n\n## Development\n\nIf you want to see what the code is doing, set the `DEBUG` environment variable\nto the string 'true'.\n\nThe code is not pleasant, it's hacky and built to do the job and no more.\n\nIt's Crystal because it is a reasonably nice way to write something high level\nbut also compiles down to a single binary.\n\nThere are lots of things to do. For instance:\n\n- tests\n- CI and cross-compile\n- refactor to support multiple providers (e.g. GitLab)\n- auto-strip [trailers](https://git-scm.com/docs/git-interpret-trailers)\n  like `Co-authored-by` and `Signed-off-by` (either all of them, or known ones)\n- user-specific config stored (preferably in conformity with the XDG spec, preferably TOML?)\n\n## Contributing\n\n1. Fork it (\u003chttps://github.com/tommorris/branchsync/fork\u003e)\n2. Create your feature branch (`git checkout -b my-new-feature`)\n3. Commit your changes (`git commit -am 'Add some feature'`)\n4. Push to the branch (`git push origin my-new-feature`)\n5. Create a new Pull Request\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftommorris%2Fbranchsync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftommorris%2Fbranchsync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftommorris%2Fbranchsync/lists"}