AI 编程代理如何改变 Git Worktrees 用法
Working with Git Worktrees in Magit

我直到最近才意识到 Git Worktrees 的存在,而改变我想法的竟是 AI 编程代理。像 Claude Code 这样的工具会为每个任务创建独立的 Worktree,让多个代理或会话能在同一仓库中并行工作而不互相干扰。文章对比了传统分支切换的繁琐与 Worktree 带来的便利,指出虽然 Worktree 需要重复设置依赖,但在处理长测试、代码审查或 AI 代理任务时极具价值。此外,作者还提到了新兴的 Jujutsu 版本控制系统,它在处理并行工作目录方面提供了更优雅的解决方案。最后,文章详细介绍了如何在 Magit 中高效管理 Worktree,包括快捷键操作和实用配置建议,帮助开发者在 Emacs 环境中实现更流畅的并行开发体验。
Worktrees 是那种你直到工作流程改变后才会发现其价值的功能。
HN 评论区
52- miggol
Worktrees 的一个小局限是,所有 worktrees 中,同一个分支只能被 checkout 一次。我想这大概就是 git 的工作机制。
但当我想 checkout 一个在另一个 worktree 中已经 checkout 的分支时,Magit 直接拒绝。我希望它能提供以下选项:
1. 切换到那个 worktree
2. 在另一个 worktree 中 detach head,然后在这里 checkout
这会是多大的改进啊!不过也没啥好抱怨的,我超爱 Magit,大不了我自己动手改。只是我不太会写 elisp。
- chukar
Worktrees 跟文件系统开销没关系。当你把 repo 访问权限交给代理,而密钥又存在于主 tree 时,你需要的是一个共享对象的干净副本。
- simonhamp
直接用 copy-on-write clones 就行了。它们更灵活、更快,也更容易理解。
我不明白为什么要把这么多时间花在试图简化 worktrees 使用的工具上,因为它们根本不适合我们现在的开发方式。
- cdmckay
我遇到的问题是,如果想测试改动,就得在 worktrees 之间来回切换,很麻烦。
对我来说,更好的做法是拥有多个 repo 副本,每个都有自己配套的环境,比如 repo-a、repo-b 等,分别对应 app-a.foo.localhost、app-b.foo.localhost 等。
- brabel
作为作者,我因为 AI 代理而开始使用 worktrees。我很喜欢 Magit,但不知道它对 git worktrees 的支持这么好!谢谢告知,我马上开始用 Magit 来管理我的 worktrees。