mirror of
https://github.com/Kilo-Org/kilocode.git
synced 2026-09-01 04:46:43 +08:00
chore(config): enforce zdiff3 conflict style via postinstall
Add a new setup script to configure `merge.conflictStyle=zdiff3` locally within the repository. This ensures that the common ancestor is visible during merge conflicts, which is required for structural resolution by `mergiraf` and simplifies manual conflict resolution. The configuration is applied during `bun install` via the `postinstall` hook and remains as a fallback for the upstream merge utilities.
This commit is contained in:
@@ -255,6 +255,10 @@ We regularly merge upstream changes from opencode. To minimize merge conflicts a
|
||||
|
||||
The goal is to keep our diff from upstream as small as possible, making regular merges straightforward and reducing the risk of conflicts.
|
||||
|
||||
### Git conflict style
|
||||
|
||||
`bun install` sets `merge.conflictStyle=zdiff3` repo-locally via `script/setup-git.ts` (wired into `postinstall`). Conflicts include the common ancestor between `|||||||` and `=======`, which is what `script/upstream/` and `mergiraf` rely on for structural resolution and what makes manual resolution on shared opencode files tractable. If you've overridden it in your user config, the repo-local setting takes precedence — don't override it back.
|
||||
|
||||
### Kilocode Change Markers
|
||||
|
||||
To minimize merge conflicts when syncing with upstream, mark Kilo Code-specific changes in shared code with `kilocode_change` comments.
|
||||
|
||||
+1
-1
@@ -11,7 +11,7 @@
|
||||
"dev:storybook": "bun --cwd packages/storybook storybook",
|
||||
"lint": "oxlint",
|
||||
"typecheck": "bun turbo typecheck",
|
||||
"postinstall": "bun run --cwd packages/opencode fix-node-pty",
|
||||
"postinstall": "bun run --cwd packages/opencode fix-node-pty && bun run script/setup-git.ts",
|
||||
"prepare": "husky",
|
||||
"random": "echo 'Random script'",
|
||||
"hello": "echo 'Hello World!'",
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
#!/usr/bin/env bun
|
||||
|
||||
/**
|
||||
* Configures repo-local git settings for all contributors.
|
||||
*
|
||||
* `merge.conflictStyle=zdiff3` makes conflict markers include the common
|
||||
* ancestor (|||||||) alongside ours/theirs. That base section is what
|
||||
* mergiraf's syntax-aware resolution feeds on during upstream opencode
|
||||
* merges (see script/upstream/merge.ts) and it makes manual resolution
|
||||
* dramatically easier than the default 2-way `merge` markers.
|
||||
*
|
||||
* Runs from `postinstall`. Safe to re-run — `git config` is idempotent.
|
||||
* Guarded so tarball / docker installs without a `.git` don't fail.
|
||||
*/
|
||||
|
||||
import { $ } from "bun"
|
||||
|
||||
const inside = await $`git rev-parse --is-inside-work-tree`.nothrow().quiet()
|
||||
if (inside.exitCode !== 0) process.exit(0)
|
||||
|
||||
await $`git config --local merge.conflictStyle zdiff3`.quiet()
|
||||
@@ -122,11 +122,11 @@ export async function commit(message: string): Promise<void> {
|
||||
}
|
||||
|
||||
export async function merge(branch: string): Promise<{ success: boolean; conflicts: string[] }> {
|
||||
// Use zdiff3 markers so conflicts carry the base version (|||||||) alongside
|
||||
// ours/theirs. This gives mergiraf the base it needs for structural heuristics
|
||||
// and makes any remaining manual resolution dramatically easier (you can see
|
||||
// what both sides changed relative to the common ancestor instead of
|
||||
// reverse-engineering it from a 2-way marker).
|
||||
// Force zdiff3 markers even if the contributor's local config has drifted:
|
||||
// conflicts carry the base version (|||||||) alongside ours/theirs so mergiraf
|
||||
// has the common ancestor for structural heuristics and any remaining manual
|
||||
// resolution is dramatically easier. `postinstall` (script/setup-git.ts) sets
|
||||
// this repo-wide as well; the `-c` override here is belt-and-suspenders.
|
||||
const result = await $`git -c merge.conflictStyle=zdiff3 merge ${branch}`.nothrow()
|
||||
|
||||
if (result.exitCode === 0) {
|
||||
|
||||
Reference in New Issue
Block a user