{"id":13635586,"url":"https://github.com/Lightricks/Kintsugi","last_synced_at":"2025-04-19T04:31:18.311Z","repository":{"id":37905266,"uuid":"359492634","full_name":"Lightricks/Kintsugi","owner":"Lightricks","description":"A tool to automatically resolve Git conflicts that occur in Xcode project files","archived":false,"fork":false,"pushed_at":"2024-11-27T21:08:55.000Z","size":271,"stargazers_count":1053,"open_issues_count":0,"forks_count":23,"subscribers_count":12,"default_branch":"main","last_synced_at":"2025-04-10T16:59:30.736Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Ruby","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/Lightricks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","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}},"created_at":"2021-04-19T14:39:54.000Z","updated_at":"2025-04-10T14:44:49.000Z","dependencies_parsed_at":"2023-12-29T14:31:12.453Z","dependency_job_id":"7696228a-7fd2-4e58-aace-0e053922fd3f","html_url":"https://github.com/Lightricks/Kintsugi","commit_stats":{"total_commits":121,"total_committers":12,"mean_commits":"10.083333333333334","dds":0.2727272727272727,"last_synced_commit":"67cc775089560fe45f4c1a153ec7d207c0fe4e14"},"previous_names":[],"tags_count":27,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lightricks%2FKintsugi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lightricks%2FKintsugi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lightricks%2FKintsugi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Lightricks%2FKintsugi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Lightricks","download_url":"https://codeload.github.com/Lightricks/Kintsugi/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249606322,"owners_count":21298851,"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-08-02T00:00:47.736Z","updated_at":"2025-04-19T04:31:17.949Z","avatar_url":"https://github.com/Lightricks.png","language":"Ruby","readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"./logo/kintsugi.png\" alt=\"Kintsugi Logo\"/\u003e\n\u003c/p\u003e\n\n# Kintsugi [![Ruby Style Guide](https://img.shields.io/badge/code_style-rubocop-brightgreen.svg)](https://github.com/rubocop/rubocop)\n\n## What is this?\n\nOne of the frustrations of working with Xcode together with Git is resolving conflicts in Xcode project files, i.e. the `project.pbxproj` file.\n\nKintsugi sets out to solve this exact problem: Automatically resolving Git merge conflicts occurring in `.pbxproj` files.\n\nThe end goal is for the tool to succeed 99.9% of the time, and let you resolve the real conflicts in a convenient way the rest of the time.\n\n\u003e Kintsugi (金継ぎ) is the art of repairing broken pottery by mending it with gold. [Wikipedia](http://en.wikipedia.org/wiki/Kintsugi)\n\n## How?\n\nKintsugi understands the changes you've made to the `.pbxproj` file, so it simply resets the conflicts and re-applies those changes to it.\n\nFrom a technical perspective, Kintsugi heavily relies on [Xcodeproj](https://github.com/CocoaPods/Xcodeproj). It uses its diff capability to extract the changes, and uses its project files editing capabilities to apply the changes.\n\n## Installing Kintsugi\n\n```sh\n$ gem install kintsugi\n```\n\nIf you prefer to use bundler, add the following line to your Gemfile:\n\n```rb\ngem 'kintsugi', require: false\n```\n\n## Usage\n\nWhen there's a `.pbxproj` file with Git conflicts, and a 3-way merge is possible, run `kintsugi \u003cpath_to_pbxproj_file\u003e`.\n\nAnd see the magic happen! :sparkles:\n\n### Interactive conflict resolution\n\nIn case Kintsugi cannot resolve a conflict on its own, it will display a helpful message describing the conflict and choices to resolve it:\n\n\u003cimg src=\"./assets/interactive-conflict-resolution.png\" alt=\"Interactive conflict resolution\"/\u003e\n\nThis feature can be disabled by passing the `--interactive-resolution false` flag.\n\n### Git merge driver\n\nYou can setup Kintsugi to automatically resolve conflicts that occur in `pbxproj` files when such conflicts occur.\n\n#### Automatic install\n\nRun `kintsugi install-driver`. This will install Kintsugi as a merge driver globally. Note that Kintsugi needs to be in your `PATH`.\n\n- Note: You can pass arguments to this command which will then be passed on to Kintsugi when it's executed as a merge driver. For example, you can pass `--interactive-resolution false` to disable interactive conflict resolution.\n\n❗ Do not install with bundler because the installation might succeed even if Kintsugi is not in `PATH`.\n\n#### Manual install\n\n- Add Kintsugi as driver to Git config file by running the following:\n```sh\ngit config merge.kintsugi.name \"Kintsugi driver\" # Or any other name you prefer\ngit config merge.kintsugi.driver \"\u003cpath_to_kintsugi\u003e driver %O %A %B %P\"\n```\n\nRun `git config` with `--global` to add this to the global config file.\n\n- Add the following line to the `.gitattributes` file at the root of the repository:\n\n`*.pbxproj merge=kintsugi`\n\nThis will instruct Git to use Kintsugi as a merge driver for `.pbxproj` files.\n\nSee the [official docs](https://git-scm.com/docs/gitattributes) if you want to set this globally.\n\n## Contribution\n\nSee our [Contribution guidelines](./CONTRIBUTING.md).\n\n## Alternatives\n\nAll of the alternatives below allow you to generate your Xcode projects based on a spec or manifest. You commit these files to git, and can even remove the `.xcodeproj` files from git.\n\n- [XcodeGen](https://github.com/yonaskolb/XcodeGen)\n- [Tuist](https://github.com/tuist)\n- [Xcake](https://github.com/igor-makarov/xcake)\n\n## Copyright\n\nCopyright (c) 2021 Lightricks. See [LICENSE](./LICENSE) for details.\n","funding_links":[],"categories":["🧰 Tools","Ruby"],"sub_categories":["Remove all Xcode DeveloperTools cache files"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLightricks%2FKintsugi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FLightricks%2FKintsugi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FLightricks%2FKintsugi/lists"}