{"id":21959575,"url":"https://github.com/cooptilleuls/template-sync","last_synced_at":"2026-03-04T21:34:27.541Z","repository":{"id":196812213,"uuid":"697192789","full_name":"coopTilleuls/template-sync","owner":"coopTilleuls","description":"Update projects started from a template with the latest changes made to the template","archived":false,"fork":false,"pushed_at":"2024-01-12T15:23:30.000Z","size":56,"stargazers_count":66,"open_issues_count":1,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-08-31T03:48:31.971Z","etag":null,"topics":["template","update-script"],"latest_commit_sha":null,"homepage":"","language":"Shell","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/coopTilleuls.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}},"created_at":"2023-09-27T08:38:39.000Z","updated_at":"2025-07-24T20:12:25.000Z","dependencies_parsed_at":null,"dependency_job_id":"69de03ef-4e89-4999-adac-14d96027f9bf","html_url":"https://github.com/coopTilleuls/template-sync","commit_stats":null,"previous_names":["mano-lis/franken-script","mano-lis/template-sync","cooptilleuls/template-sync"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/coopTilleuls/template-sync","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coopTilleuls%2Ftemplate-sync","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coopTilleuls%2Ftemplate-sync/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coopTilleuls%2Ftemplate-sync/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coopTilleuls%2Ftemplate-sync/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coopTilleuls","download_url":"https://codeload.github.com/coopTilleuls/template-sync/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coopTilleuls%2Ftemplate-sync/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30093989,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T20:42:30.420Z","status":"ssl_error","status_checked_at":"2026-03-04T20:42:30.057Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["template","update-script"],"created_at":"2024-11-29T09:29:26.346Z","updated_at":"2026-03-04T21:34:27.506Z","avatar_url":"https://github.com/coopTilleuls.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Template Sync\n\nYou started a project from a template repository but the template changed since you started the project?\nTemplate Sync will import the changes made to the template to your project in a blink!\n\n## Getting Started\n\n```console\ncurl -sSL https://raw.githubusercontent.com/coopTilleuls/template-sync/main/template-sync.sh | sh -s -- \u003curl-of-the-template\u003e\n```\nIf you have some conflicts, resolve them and run `git cherry-pick --continue`.\n\n## Supported Templates\n\n* [GitHub Templates](https://docs.github.com/en/repositories/creating-and-managing-repositories/creating-a-repository-from-a-template)\n* [GitLab Templates](https://docs.gitlab.com/ee/user/project/pages/getting_started/pages_new_project_template.html)\n* [Symfony Docker](https://github.com/dunglas/symfony-docker)\n* [API Platform Distribution](https://github.com/api-platform/api-platform)\n* [Next.js starters](https://vercel.com/templates/next.js)\n\n## How it works\n\nThis script identifies a commit in the template history which is the closest one to your project.\nThen it squashes all the updates into a commit which will be cherry-picked on the top of your working branch.\nTherefore you just have to resolve conflicts and work is done!\n\n### Monorepo containing multiple templates\n\nUsing this kind of templates, you have to specify the subdirectory where your template is with\nthe `--directory` flag.\n\nFor example, assume you work on a project base on the template \"api-routes\" from next starters.\nThe main monorepo is vercel/next.js and the template is located in examples/api-routes :\n```console\ncurl -sSL https://raw.githubusercontent.com/coopTilleuls/template-sync/main/template-sync.sh | sh -s -- https://github.com/vercel/next.js --directory=examples/api-routes\n```\n\n### Advanced\n\n1. Go to your project repository (we recommend to create a new branch)\nCopy template-sync.sh at the root of your project\n\n2. The only mandatory argument is the GitHub or GitLab URL of your template but if you want to synchronize your project with a specific version of the template, you can specify the commit you are targeting by adding `--commit=\u003ccommit SHA\u003e`.\nE.g. Assume your project is based on dunglas/symfony-docker and you just want to get the improvements of the new php app server [FrankenPHP](https://frankenphp.dev/). Run this command :\n```console\ncurl -sSL https://raw.githubusercontent.com/coopTilleuls/template-sync/main/template-sync.sh | sh -s -- https://github.com/dunglas/symfony-docker --commit=88f5c19\n```\n\n3. In case some files are renamed or moved in the template history, you can modify the threshold where\ngit considers two files as identical. Default value for this script is 20% (git's default value is 50%).\nIf git is confused and considers files that are not identical to be identical, you can raise this threshold.\nE.g:\n```console\ncurl -sSL https://raw.githubusercontent.com/coopTilleuls/template-sync/main/template-sync.sh | sh -s -- \u003curl-of-the-template\u003e --threshold=30\n```\n\n4. You can run the script in debug mode by adding the `--debug` flag.\n\n5. If for any reason you are not satisfied with the result of the script you just have to run `git cherry-pick --abort` to rollback before the execution of the script.\n\n\n*Created by [Emmanuel Barat](https://github.com/mano-lis) and [Raphael Marchese](https://github.com/Raphael-Marchese)*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcooptilleuls%2Ftemplate-sync","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcooptilleuls%2Ftemplate-sync","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcooptilleuls%2Ftemplate-sync/lists"}