git worktree
git worktree 和 branch 管理模式的区别
agent编程时代, 经常使用多个agent并行开发, 比如使用多个agent开发不同模块, 或者使用多个agent开发同一个功能, 然后对比找出最好的实现. 传统的git branch方式的管理不能很好的支持这种开发模式, 因为git只允许同时检出一个分支, 严重限制了并行开发的能力.
使用 git worktree 可以很好的解决这个问题, 使用多个worktree对应检出多个分支, 每个分支对应一个worktree工作目录, 各个工作目录相互隔离, 互不影响.
worktree的特点:
- 一个分支只允许有一个worktree.
- 一个worktree在检出之后, 不能切换分支.
- worktree不能独立存在, 必须依附一个分支检出的工作目录(本地主仓库), 所有的worktree都需要与这个分支工作目录共享同一份 git 数据库.
- worktree如果有文件被修改但没有提交, 执行worktree remove会报错, 需要先提交, 或者remove 命令增加 --force 选项.
worktree模式的推荐做法:
- 将本地主仓库固定在一个主分支上, 比如 main 或 develop 分支, 专门用于拉取最新的代码或查看全局状态.
- 所有的开发工作放到不同的worktree中进行
- worktree的目录结构采用扁平方式, 比如:
--projects
|--my_project (主仓库)
| |--src/
| |--.git/
|--my_project_feature1 (worktree)
| |--src/
| |--.git 文件, 这个文件告知worktree的git数据库指向主仓库
|--my_project_feature2 (worktree)
| |--src/
| |--.git 文件, 这个文件告知worktree的git数据库指向主仓库
- 对应的操作命令:
cd projects/my_project
#可以提前创建feature分支, 如果对应分支不存在, 下面worktree add命令也会自动创建分支
git worktree add ../my_project_feature1 -b feature1
git worktree add ../my_project_feature2 -b feature2
#查看有多少个worktree
git worktree list
#删除本地的worktree
git worktree remove ../my_project_feature1
#如果之前已经删除了worktree目录, 需要使用 prune 命令清除残留记录
git worktree prune

浙公网安备 33010602011771号