prettier + husky 是最常用的 html 协作防冲突方案,通过 commit 前自动格式化统一空格、换行、引号和属性顺序,消除无意义 diff;但其不处理 class 合并等语义冲突,需配合文件拆分、责任划分与 pr 流程保障语义一致性。

没有“自动防冲突”的HTML方案,所有预防都依赖外部机制——要么靠工具链强制格式统一,要么靠流程卡点拦截提交。
用 Prettier + Husky 在 git commit 前自动格式化
多人改同一份 HTML,最常见冲突不是逻辑错,而是空格、换行、引号、属性顺序不一致导致的无意义 diff。Prettier 能把所有人的 HTML 输出压缩成一种结构,让 Git 只关注真实变更。
- 安装:
npm install --save-dev prettier husky lint-staged - 配置
.prettierrc:至少设"htmlWhitespaceSensitivity": "strict",否则<div><p> 和 <code><div>\n <p> 会被视为不同 </p> <li>加 husky 钩子:<code>npx husky add .husky/pre-commit "npx lint-staged",再在lint-staged中配"*.html": ["prettier --write"] - 注意:Prettier 不处理 class 合并(如
class="a"和class="b"并发修改不会自动变成class="a b"),它只管格式,不管语义 - 必须拦截:
onpaste="event.preventDefault()",再用event.clipboardData.getData('text/plain')提纯文本 - 回车键必须
keydown中e.preventDefault(),否则 Chrome 插<div></div>、Firefox 插<br>,diff 失效 - 光标同步不能靠
document.getSelection()实时取——要结合selectionchange事件 +MutationObserver监听characterData和childList,否则两人同时在开头插入文字,一方内容会丢 - 别用
innerHTML快照比对:不同浏览器序列化结果不同,大文档解析慢,且无法定位并发插入位置 - 前端示例:
<textarea hx-post="/save" hx-include="[name='version']" hx-trigger="input delay:1s"></textarea><input type="hidden" name="version" value="v123"> - 服务端收到后查数据库当前
version是否仍为v123;若不是,返回 HTTP 409 Conflict + 一段含“对方已修改,请刷新后重试”的 HTML 片段 - htmx 默认将 409 渲染到
hx-target区域,无需额外 JS 处理 - 这个方案不解决“实时看到别人打字”,但能确保你提交时不静默覆盖——这是成本最低、落地最快的冲突拦截
- 按模块拆分 HTML:把
header.html、nav.html、footer.html独立出来,用<include></include>或构建时拼接,减少单文件并发编辑概率 - 指定
index.html的 owner:在 README 或 CODEOWNERS 里写明谁负责主入口,其他人需 PR 并 tag 对应人 review - 禁止直接 push 到 main:所有修改必须走 Pull Request,CI 流程里跑
prettier --check+git diff --no-index /dev/null index.html | wc -l类似校验,避免格式污染 - 注意:CodeSandbox / Live Share 的“实时协同”不等于 Git 协同——沙盒自动保存 ≠ 本地仓库 commit,导出前务必
git pull再git push,否则线上和本地状态可能分裂
contenteditable 元素必须禁用默认行为再接管输入
如果项目用了 contenteditable="true" 做富文本协作(比如在线文档编辑器),直接监听 input 或 keyup 会漏掉粘贴、拖拽、中文上屏、格式按钮点击等操作,导致本地状态和服务端脱节,最终引发 DOM 覆盖。
如果你了解HTML,CSS和JavaScript,您已经拥有所需的工具开发Android应用程序。本动手本书展示了如何使用这些开源web标准设计和建造,可适应任何Android设备的应用程序 - 无需使用Java。您将学习如何创建一个在您选择的平台的Android友好的网络应用程序,然后转换与自由PhoneGap框架到一个原生的Android应用程序。了解为什么设备无关的移动应用是未来的潮流,并开始构建应用程序,提供更
htmx 提交时带 version 字段做乐观锁校验
不需要 WebSocket 或 CRDT,也能防止覆盖他人修改——关键是在每次保存请求里带上当前版本标识,让服务端决定是否接受。
Git 分支策略必须配合文件级责任划分
即使有工具链,人仍是最大变量。一个 HTML 文件被五个人同时改,再好的格式化也救不了。
真正难的从来不是技术选型,而是让所有人同一时刻提交的 HTML,既格式一致、又语义不冲突、还知道该找谁确认——这三件事,没一个能靠单点工具解决。










