mcpField
M
mergelock

mergelock

本地服务
github.com版本控制02 周前更新

关于 mergelock

mergelock 是面向开发者和编码 Agent 的 Git 原生合并门禁。它从提交数据中查找函数签名变更与新增调用不兼容等语义冲突,且不修改工作树。

主要功能

  1. 01检测文本合并冲突
  2. 02查找签名与调用不匹配
  3. 03报告仍被使用的已删除符号
  4. 04检测重复定义
  5. 05解析 TypeScript、JavaScript 和 Python

适用场景

  1. 01合并前检查分支
  2. 02在 CI 中运行合并检查
  3. 03设置推送前合并门禁
  4. 04让编码 Agent 检查分支冲突

MCP 相关

mergelock 可通过标准输入输出作为 MCP 服务运行,让 AI Agent 检查分支冲突。README 未说明其 MCP 工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"sadayamuthu-mergelock": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/sadayamuthu/mergelock:0.1.5"
]
}
}
}
启动命令docker run -i --rm ghcr.io/sadayamuthu/mergelock:0.1.5

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/sadayamuthu/mergelock:0.1.5

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

mergelock

CI Release Homebrew Docker deb/rpm MCP Registry Glama License

一款原生基于 git 的合并门禁。mergelock check 会在两个分支合并前进行比较,并报告 git 本身不会告知你的冲突:一个分支更改了函数签名,而另一个分支仍添加了对旧签名的调用;某个符号在一侧被删除,但另一侧仍在使用;同一个函数被编写了两次。

两个 Agent 分支在 git 中顺利合并;mergelock 报告 checkout.ts 仍在使用旧签名调用 login()

它绝不会触碰你的工作树。所有计算都基于提交,使用 git merge-tree 和 tree-sitter 解析器,因此可安全用于 pre-push 钩子、CI,或通过 MCP 由 AI 编码 Agent 运行。

检测内容

规则报告内容严重性
textual普通的 git 内容冲突错误
add_add两个分支在同一路径添加了文件错误
modify_delete一个分支编辑了另一个分支删除的文件或符号,或仍调用已删除的符号错误
signature_caller一个分支更改了签名;另一个分支添加了与新签名不兼容的调用错误
duplicate_definition两个分支添加了同一个函数,按名称或近乎相同的函数体判定警告

语义规则支持 TypeScript、JavaScript(包括 TSX/JSX)和 Python。其他语言的文件仍会进行文本冲突、同时添加和修改后删除检查。

安装

mergelock 需要 git 2.38 或更高版本(用于 git merge-tree --write-tree)。

Homebrew(macOS 和 Linux):

brew install sadayamuthu/tap/mergelock

Debian / Ubuntu(.deb,amd64 和 arm64;需要使用 git 2.38+ 的发行版,例如 Debian 12 或 Ubuntu 24.04):

VERSION=0.1.5   # latest release, without the v
curl -fLO "https://github.com/sadayamuthu/mergelock/releases/download/v${VERSION}/mergelock_${VERSION}_$(dpkg --print-architecture).deb"
sudo apt install "./mergelock_${VERSION}_$(dpkg --print-architecture).deb"

Fedora / RHEL(.rpm,x86_64 和 aarch64):

VERSION=0.1.5
sudo dnf install "https://github.com/sadayamuthu/mergelock/releases/download/v${VERSION}/mergelock-${VERSION}-1.$(uname -m).rpm"

Docker(linux/amd64 和 linux/arm64;将仓库挂载到 /repo):

docker run --rm -v "$PWD":/repo ghcr.io/sadayamuthu/mergelock check my-branch main --format text
docker run -i --rm -v "$PWD":/repo ghcr.io/sadayamuthu/mergelock   # MCP server on stdio

GitHub Actions(对照基分支检查每个拉取请求;参见 在 CI 中):

- uses: actions/checkout@v4
  with:
    fetch-depth: 0
- uses: sadayamuthu/mergelock@v0

预编译二进制文件(macOS 和 Linux,amd64 和 arm64):从 最新版本 下载适用于你平台的压缩包,然后将 mergelock 放入 PATH:

tar -xzf mergelock_*_$(uname -s | tr A-Z a-z)_*.tar.gz
sudo mv mergelock /usr/local/bin/

在 macOS 上,从浏览器下载的压缩包中的二进制文件会被 Gatekeeper 拦截,因为它尚未签名(Homebrew 安装不受影响)。只需清除一次隔离标记:

xattr -d com.apple.quarantine /usr/local/bin/mergelock

使用 Go(需要 Go 1.25 或更高版本以及 C 编译器,因为 tree-sitter 使用 cgo;在 macOS 上安装 Xcode 命令行工具,在 Debian/Ubuntu 上安装 build-essential):

go install github.com/sadayamuthu/mergelock/cmd/mergelock@latest

或从源代码构建:

git clone https://github.com/sadayamuthu/mergelock.git
cd mergelock
go build -ldflags "-X main.version=$(git describe --tags --always)" -o mergelock ./cmd/mergelock

检查是否运行正常:

mergelock version

快速开始

在任意 Git 仓库中运行:

# Is my branch safe to merge into main?
mergelock check my-feature main

# Compare against the configured target (main by default)
mergelock check my-feature

# Will two in-flight branches collide with each other?
mergelock check feat-a feat-b --format text

退出码便于编写脚本:

代码结果
0clean:未发现问题
1warnings:只有警告
2conflict:至少有一个错误
3操作错误(分支名称无效、不是 Git 仓库、配置无效……)

完整的命令参考、.mergelock.yml 配置、JSON 输出架构、CI 和 Git 钩子示例,以及如何通过 MCP 将其连接到 AI Agent,请参阅 USAGE.md。 如需报告未检测到的冲突或添加语言,请参阅 CONTRIBUTING.md;如遇到安全问题,请参阅 SECURITY.md。

开发

go test ./...          # full suite, incl. fixture gate and 5,000-file perf test
go test -short ./...   # skips the perf test
go vet ./...
gofmt -l .

规则行为由 testdata/fixtures/*.txtar 中的分支对测试夹具固定;每个夹具都是一个精简的仓库,包含一个基础分支、两个分支和预期的检测结果。

许可证

Apache License 2.0

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。