处世如大梦,悟者能有几

— 宋·李纲

作者:pluto 更新时间:2026-04-17

Fossil 不仅仅是版本控制,它是一个集代码、文档、计划于一体的“项目保险箱”。


一、 日常工作流 (The Daily Workflow)

Fossil 的逻辑是“所见即所得”,没有 Git 那些复杂的暂存区概念。

1. 基础开发循环

  • 查看状态:随时检查哪些文件被动过。 ```bash fossil status
  • 忽略文件:告诉 Fossil 不要管哪些文件。
    # 把 node_modules 彻底踢出管理
    echo "node_modules/" >> .fossilignore
    fossil addremove  # 应用到仓库
    
  • 提交:写下“说明书”,锁住当前状态。
    fossil commit -m "新增用户登录功能"
    
  • 推送/拉取:同步到云端保险箱。
  # 推送到你的服务器
  fossil push http://example.com/repo.fossil

  # 从服务器拉取最新变更
  fossil pull http://example.com/repo.fossil
  • 添加/删除文件:
  # 新增
  fossil add newfile.txt

  # 删除
  fossil rm oldfile.txt
  • 撤销修改:撤销到上一次提交。 ```bash # 撤销所有未提交的更改 fossil revert --all

# 只撤销某个文件 fossil revert file.txt ```

  • 差异对比 ```bash # 查看工作区和上一版本的差异 fossil diff

# 查看某个文件的差异 fossil diff file.txt ```

2. 撤销与恢复

  • 回滚本地修改 ```bash # 回滚所有未提交的更改 fossil revert --all

# 只回滚某个文件 fossil revert file.txt ```

  • 比较差异 ```bash # 查看工作区和上一版本的差异 fossil diff

# 查看某个文件的差异 fossil diff file.txt ```

  • 版本历史 ```bash # 查看提交历史 fossil timeline

# 查看特定文件的提交历史 fossil timeline file.txt ```

  • 查看文件内容 ```bash # 查看当前版本的特定文件内容 fossil cat file.txt

# 查看特定版本的特定文件内容 fossil cat file.txt@1 ```

  • 查看文件属性
    # 查看特定文件的属性
    fossil prop file.txt
    
  • 撤销提交
    # 撤销最近一次提交
    fossil undo
    

3. 分支管理

  • 创建分支 ```bash # 创建新分支 fossil branch new feature-branch

# 切换到新分支 fossil checkout feature-branch ```

  • 合并分支 ```bash # 切换到目标分支 fossil checkout main

# 合并特性分支 fossil merge feature-branch ```

  • 查看分支 ```bash # 查看所有分支 fossil branch list

# 查看当前分支 fossil branch current ```

  • 重命名分支
    # 重命名当前分支
    fossil branch rename main main_v2
    
  • 关闭分支
    # 关闭分支
    fossil branch close feature-branch
    

4. 标记与版本

  • 创建标记 ```bash # 创建标记 fossil tag add v1.0.0

# 创建带描述的标记 fossil tag add v1.0.0 "版本1.0.0发布" ```

  • 查看标记 ```bash # 查看所有标记 fossil tag list

# 查看特定标记的详细信息 fossil tag info v1.0.0 ```

  • 删除标记 ```bash

    删除标记

    fossil tag remove v1.0.0 ```

    二、Fossil 内置 Web UI 高级用法

    执行 fossil ui 后,除了看代码,你还应该关注: Admin -> Settings: diff-binary:设置你喜欢的第三方对比工具。

    ignore-glob:设置忽略规则(如 *.o,*.obj,node_modules/*)。
    

    Tickets: 自定义工单字段。所有的 Bug 记录都会随代码一起备份。 Wiki: 直接在 Web 界面写 Markdown 文档,全团队同步。

    三、Serverless 部署实践

    Fossil 可以直接通过 HTTP 访问,不需要 Nginx 反向代理。

    //开启http服务
    fossil http /myrepo.fossil
    //或者使用
    fossil server /myrepo.fossil
    

    四、版本合并策略

    智能合并(默认)

    fossil merge feature/A

    尝试自动合并,如果冲突则中止

    fossil merge --allow-empty feature/A

    强制合并(即使有冲突也合并)

    fossil merge --allow-empty --allow-conflict feature/A

    五、备份与归档策略

    备份当前版本

    fossil backup /myrepo.fossil

    备份到另一个文件

    fossil backup /myrepo.fossil backup.fossil

    备份到只读文件

    fossil backup /myrepo.fossil readonly.fossil

    备份到只读文件并压缩

    fossil backup -z /myrepo.fossil readonly.fossil

    查看备份文件

    fossil ls -L /myrepo.fossil

    六、进阶技巧 (Power User Tips)

  • 忽略文件配置 不需要 .gitignore 文件,直接写进仓库配置:

    fossil settings ignore-glob "target/*,.idea/*,*.log"
    

  • 查找历史

    fossil timeline -n 20      # 查看最近 20 条提交
    fossil finfo [file]        # 查看具体某个文件的修改史
    

  • 彻底删除误传文件 (Shun)

Fossil 默认不删历史,如果你不小心传了 1GB 的电影或密码,需要: 在 UI 界面找到该 Artifact 的 SHA1 值。 进入 Admin -> Control -> Shunned Artifacts。 填入 SHA1 值并保存。