如何让多个git worktree并行开发零端口冲突?Sonar port: auto与${port}变量详解
【免费下载链接】sonarCLI tool for inspecting and managing services listening on localhost ports项目地址https://gitcode.com/gh_mirrors/sonar17/sonar点击查看免费下载Sonar 是一款本地端口管理与服务启动 CLI 工具它用port: auto自动端口分配和${port}变量让多个 git worktree 并行跑同一套开发服务时不再互相抢占端口。本文详解这两个机制的原理、配置方法和日常用法帮你彻底告别 EADDRINUSE。为什么 worktree 并行开发总撞端口用git worktree开多个分支并行开发是常见做法但每个 worktree 里都要启动同样的开发服务前端、API、数据库。如果端口写死在sonar.yaml或启动命令里主 worktree 的vite占了5173新 worktree 一启动就报EADDRINUSE手动改成别的端口又忘了同步改前端里写死的API_URL两个 worktree 的sonar list输出混在一起分不清哪个服务属于谁Sonar 的思路是把端口交给工具决定服务之间通过环境变量互相发现地址而不是硬编码localhost:8080。快速上手sonar.yaml 里的 port: auto在仓库根目录的sonar.yaml中把不希望固定的服务端口声明为port: autoname: my-app services: - name: db cmd: docker compose up db port: 5432 - name: api cmd: uv run uvicorn app:app --port ${port} port: auto depends_on: [db] - name: frontend cmd: npm run dev -- --port ${port} --strictPort port: auto depends_on: [api] env: VITE_API_URL: ${api.url}然后一条命令启动sonar start输出类似✓ db http://localhost:5432 pid 41022 ✓ api http://localhost:21408 pid 41040 ✓ frontend http://localhost:21409 pid 41077api和frontend的端口是 Sonar 现场分配的完全不用你操心。${port} 变量展开规则4 种写法其他原样保留${port}类引用由 refs.go 实现规则非常克制——只认 4 种形态写法含义${port}本服务自己的端口${url}本服务的http://localhost:port${api.port}另一个服务api的端口${api.url}另一个服务api的完整 URL两个关键点只在cmd和env中生效且必须在服务实际启动前所有被引用服务的端口都确定后展开见 start.go 中addressBook的解析流程其他${...}一律原样保留。比如${HOME}、${FOO:-x}不会被误伤——因为命令最终会交给sh -c执行这一点对已有 shell 变量的项目特别友好引用了文件中不存在的服务、或对方根本没声明端口会在加载配置时直接报错而不是运行到一半才失败。端口从哪来同一 worktree 稳定、不同 worktree 错开这是零冲突的核心。认领逻辑在 claims.go 和 hash.go按项目 worktree 服务名派生每个port: auto服务以project/worktree/service为认领键对键做 FNV-1a 哈希落入10000–32699区间内某个 10 端口块作为起点再向上探测跳过正在监听和已被认领的端口同一 checkout 每次得到同一个端口哈希是确定性的所以主 worktree 的api永远是21408重启、重开终端都不变——书签、文档里写的地址依然有效不同 worktree 得到不同端口键不同哈希起点就不同新 worktree 的api可能落在21411天然错开认领有 24 小时 TTL每次启动会刷新服务停止后用sonar down会主动释放认领端口立刻归还这个范围10000–32699也刻意避开了常用开发端口和操作系统临时端口区内核不会把认领的端口分给出站连接。worktree 自动分组my-app 与 my-appfeature-xSonar 通过 checkout.go 识别 git 检出位置主检出是my-app每个git worktree add出来的联检出名my-appworktree。这意味着两个 worktree 同时sonar start后$ sonar list --tree my-app (3 ports, running) ~/code/my-app ├─ 5432 db postgres:17 ├─ 21408 api uvicorn app:app └─ 21409 frontend vite my-appfix-x (3 ports, running) ~/code/my-appfix-x ├─ 5432 db postgres:17 ├─ 21411 api uvicorn app:app └─ 21412 frontend vite两组完全独立sonar kill -g my-appfix-x只停掉 worktree 里的服务主检出纹丝不动。而且即使 worktree 里有一份旧的sonar.yaml副本它也只描述服务、不覆盖组名不会把 worktree 折回主检出组里。不启动就能查端口sonar env写脚本、跑测试、配编辑器时经常需要知道这个服务将会用哪个端口。sonar env走的是与groups.start完全相同的端口解析路径但不启动任何进程实现见 env.gosonar env # 所有服务的端口、URL、展开后的环境变量 sonar env frontend # 单个服务输出 export 行 eval $(sonar env frontend) npm testport: auto且未运行的服务在这里拿到的就是之后sonar start会绑定的同一个端口——先读后启动所见即所得。手动认领端口sonar claim 与 worktree_ports除了随服务自动认领claim.go 提供了显式认领适合给 AI agent 或脚本预留端口sonar claim # 为当前 worktree 认领 1 个端口 sonar claim --count 3 # 认领 3 个 sonar claim --ttl 2h # 缩短 24 小时默认 TTL sonar claim --release # 归还本 worktree 的端口 sonar claims # 列出机器上所有存活认领另外sonar.yaml顶层的worktree_ports见 config.go可以声明这个项目每次认领几个端口sonar claim不带--count时就会按它来上限 100。日常操作速查场景命令启动当前目录的项目sonar start后台启动等价 sonar upsonar start -d查看端口解析结果sonar env只启动部分服务sonar start api frontend停止并释放自动认领的端口sonar down整组杀端口不释放认领sonar kill -g my-app等待端口就绪再跑迁移sonar wait 5432 --timeout 60s npm run migrate健康检查sonar list --health两个容易混淆的点depends_on会等依赖服务的端口真正监听后才启动本服务等待上限 30 秒单个依赖超时只跳过它、不影响其他服务sonar down会释放port: auto的认领而sonar kill -g只停进程、不动认领。小结Sonar 解决 worktree 端口冲突的三板斧port: auto把端口分配交给 daemon 的认领账本哈希派生保证同 worktree 稳定、跨 worktree 错开${port}/${service.url}让服务间通过环境变量互相发现配置里零硬编码worktree 自动成为独立分组my-appfix-x启动、查看、停止全程隔离装好 Sonar、把固定端口改成port: auto、命令里改用${port}多 worktree 并行开发就可以放心开了。更多细节可参考 README.md 和 MCP 协议定义 protocol.schema.json。赞分享【免费下载链接】sonarCLI tool for inspecting and managing services listening on localhost ports项目地址https://gitcode.com/gh_mirrors/sonar17/sonar点击查看免费下载相关推荐从零到接收一份完整的 SDR 软件无线电免费教程从零到接收一份完整的 SDR 软件无线电免费教程 对于从未接触过无线电的人来说用 SDR 做软件无线电是一个务实的起点它免费、开源、跨平台配合一桌面应用音频处理智能硬件Overstory Git Worktree 隔离机制多智能体并行开发零冲突的完整解析Overstory Git Worktree 隔离机制多智能体并行开发零冲突的完整解析 Overstory 是一款面向 AI 编程智能体如 Claude Cclaude-task-master 并行开发实战用 Git Worktree 让多个 AI 编码助手同时工作互不冲突claude task master 并行开发实战用 Git Worktree 让多个 AI 编码助手同时工作互不冲突 导读本文基于 claude taskAI Agent开发工具CLIMCP创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

仓颉鸿蒙 Location Kit 位置服务错误码全解:从 3301000 到 3301800 的成因分析与处理指南

仓颉鸿蒙 Location Kit 位置服务错误码全解:从 3301000 到 3301800 的成因分析与处理指南

文档知识库教程OpenHarmony 【免费下载链接】CangjieCorpus 本仓库为仓颉编程语言语料库,聚焦 仓颉编程语言 核心知识体系,整合官方开发指南、API 文档、典型代码示例及语法规范等多维度资源,经结构化处理与专业标注,构建为支持 R…

2026/10/16 2:03:46 阅读更多 →
10分钟上手 Modly:从安装到首次生成本地 3D 模型

10分钟上手 Modly:从安装到首次生成本地 3D 模型

10分钟上手 Modly:从安装到首次生成本地 3D 模型 【免费下载链接】modly Desktop app to generate 3D models from images or prompt using local AI — runs entirely on your GPU 项目地址: https://gitcode.com/GitHub_Trending/mo/modly Modly 是一款本地…

2026/10/16 2:03:46 阅读更多 →
非线性最小二乘优化实战:高斯-牛顿、LM与Dog-Leg方法详解

非线性最小二乘优化实战:高斯-牛顿、LM与Dog-Leg方法详解

1. 为什么非线性最小二乘值得单独整理如果你做过视觉SLAM、点云配准、曲线拟合、相机标定,或者任何需要"让模型输出逼近真实观测"的工程任务,那你大概率已经和非线性最小二乘打过照面了。它要解决的问题非常朴素:给定一组观测数据和…

2026/10/16 2:03:46 阅读更多 →

最新新闻

建筑改造项目的表计难题:拆不了换不动,水电气数据怎么远程拿?

建筑改造项目的表计难题:拆不了换不动,水电气数据怎么远程拿?

建筑改造项目做到水电配套这一步,表计怎么处理,常常是第一个卡住的地方。新建工程的表计配套相对简单。但改造项目和存量建筑不一样,每栋楼的情况都不同。有的管网锈了二十年不敢碰,有的管井窄到人侧身才能进去,有的本…

2026/10/16 2:49:57 阅读更多 →
steve-jobs - SKILL

steve-jobs - SKILL

name: steve-jobs description: “Agente que simula Steve Jobs — cofundador da Apple, CEO da Pixar, fundador da NeXT, o maior designer de produtos tecnologicos da historia e o mais influente apresentador de produtos do mundo.” risk: safe source: community …

2026/10/16 2:49:57 阅读更多 →
Eclipse配C++全指南:CDT插件与MinGW-w64环境搭建及排障

Eclipse配C++全指南:CDT插件与MinGW-w64环境搭建及排障

写Eclipse配C这事,网上教程一抓一大把,但大多是“下一步下一步”的截图流,看完装完一编译就傻眼。我自己从大一折腾到工作,中间踩过的坑比代码还多,什么CDT装不上、MinGW路径不对、调试器连不上,全都经历过…

2026/10/16 2:49:57 阅读更多 →
VS2019+Qt开发配置全攻略:版本选择、扩展安装与常见报错解决

VS2019+Qt开发配置全攻略:版本选择、扩展安装与常见报错解决

在VS2019里用Qt做开发,这个组合对不少Windows桌面程序员来说,属于"迟早要碰"的那类东西。但真正第一次动手的人会发现,从下载安装包到VS2019里弹出第一个窗口,中间隔着不少事先没人告诉你的决定:装Qt 5还是Q…

2026/10/16 2:49:56 阅读更多 →
CodeBuddy IDE实测:AI Agent如何重塑开发工作流

CodeBuddy IDE实测:AI Agent如何重塑开发工作流

打开下载页,看到 CodeBuddy IDE 的状态已经是"可下载",再扫一眼社区里关于 WorkBuddy 的讨论,大家都管它叫"腾讯版小龙虾",说实话我的第一反应是:腾讯这次是真的下场比赛了。2025 年的 AI 编程赛道…

2026/10/16 2:49:56 阅读更多 →
WuKongIM 动态数据节点生产就绪(Stage 9):持久化健康新鲜度、fail-closed 放置门禁与真实流量生命周期验证

WuKongIM 动态数据节点生产就绪(Stage 9):持久化健康新鲜度、fail-closed 放置门禁与真实流量生命周期验证

即时通讯后端 【免费下载链接】WuKongIM More than just IM 不只是即时通讯(IM) 项目地址: https://gitcode.com/gh_mirrors/wu/WuKongIM 点击查看 免费下载 在 WuKongIM 的动态节点生命周期体系中,Stage 9 解决的是“功能可用”与“生产可运维”之间的…

2026/10/16 2:48:56 阅读更多 →

日新闻

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

个人 AI Agent 平台接入 TaoToken:统一 Key 与 API 通道的配置大纲

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 0:00:05 阅读更多 →
信号与系统频域分析作业解题指南

信号与系统频域分析作业解题指南

1. 作业背景与核心要求解析信号与系统作为电子信息类专业的核心基础课,其作业设计往往直接关联课程的核心知识框架。2026年春季第六次作业的布置,通常对应着课程进展到频域分析的关键阶段。根据常规教学进度推测,本次作业可能涉及以下核心内容…

2026/10/16 0:00:05 阅读更多 →
Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

Django MVT实战:从零构建图书借阅系统,彻底搞懂Model-View-Template分层

1. 从一个"四不像"的练手项目说起如果你已经看完了Django的官方教程前几章,跟着敲完了投票应用,大概会有一种"我好像会了,又好像什么都不会"的割裂感。教程里每个知识点都是拆开的——这一章讲模型,下一章讲视…

2026/10/16 0:00:05 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/15 16:18:54 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/15 19:41:51 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/15 13:48:15 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 0:14:36 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/15 9:49:14 阅读更多 →