Skip to content

[Feature]: 同步功能很不好用 #457

Closed

Description

@EthanCodeCraft

你的建议 / Your suggestion

我目前使用个人git来实现两台设备间的navop配置同步,但是折腾了个把小时依然难以继续,两台设备间总是相互打架,就是没法实现同步。不知道作者能不能考虑再增加个导入导出的同步方式,这样在某些特殊离线环境下也能很好的使用,一举两得。

补充信息 / Additional context

两台设备git同步有时候会报“存在本地和远程之间的冲突”,让我选择是使用远程还是本地,然而我点击“应用”按钮却没有任何反应,提示依然存在,设置也没有生效。

Activity

  1. feigeCode commented on Oct 23, 2026

    @feigeCode
    Owner

    感谢反馈,问题已定位并修复(dev 分支 14afa9e),下个版本发布。

    根因

    这条链路上叠加了 5 个问题,导致「点应用没反应、提示永远在、两台设备打架」:

    1. 点了没反应:点「应用」后,解决操作的成功/失败只写进了内部状态,没有任何窗口提示;而对话框此时已经关闭,看起来就像按钮坏了。
    2. 一条失败全部中断:批量解决冲突时,第一条失败就会中断整批,剩下的冲突原样挂着。
    3. 冲突永远解不开:解决冲突时用的是「检测到冲突那一刻」的远端版本号做校验。如果另一台设备在这期间又推送过,写入会被 "stale version" 拒绝——正是「点了应用、提示依然存在」的直接原因。
    4. rebase 冲突卡死:git 同步在 pull --rebase 遇到冲突后没有清理,仓库永久停在冲突中间态,之后所有同步都失败。
    5. 脏工作区瘫痪(最常见路径):有冲突挂起时,本地已生成的同步变更不会提交;下一轮 git pull --rebase 被 git 以「有未提交改动」直接拒绝,且这个报错没有被正确归类,同步从此彻底瘫痪——这就是「折腾一小时也没法继续」的来源。

    修复内容

    • ✅ 点「应用」后一定有结果通知:成功显示「已解决 N 个冲突」,失败显示原因,部分成功也会说明几成几败
    • ✅ 批量解决逐条执行,单条失败不影响其余
    • ✅ 解决冲突前实时读取远端当前版本,对端推过新版本也能一次解开
    • ✅ git 同步自愈:rebase 冲突自动 abort 重试;脏工作区自动 stash/恢复;push 被拒自动先拉取再重推;确实解不开时才如实报错

    升级后如果还有卡住的仓库,第一次同步会自动完成自愈,不需要手动处理 .onetcli-sync。

    关于导入/导出的离线同步方式,已记录为独立需求,后续单独评估。欢迎升级后反馈效果 🙏

  2. EthanCodeCraft commented on Oct 23, 2026

    @EthanCodeCraft
    Author
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions