← 返回文章列表

Claude Code Worktree

AI
  • # ai
  • # claude-code
  • # git
  • # worktree

这篇文章是读了 sorrycc 的 Claude Code Worktree 之后,顺手整理的一点使用笔记。

Claude 的 worktree 本质上其实就是 Git worktree

默认创建路径 .claude/worktrees/

# 创建一个名为 `project-task` 的 worktree。
claude -w project-task 
# 不指定名字时,让 Claude 自动创建一个 worktree
claude -w 

# 查看当前仓库挂了哪些 worktree
git worktree list

# Claude 退出会询问是否删除 worktree。如果没有进行任何改动,会自动删除 worktree。
# 也可以手动删除
git worktree remove project-task

搭配 git branch 使用

一般不需要先手动创建分支。直接让 Claude 创建 worktree 就可以,它会为这个 worktree 准备对应的分支。

如果已经有一个现成分支,也可以让 worktree 基于这个分支继续工作。但多数临时任务里,更自然的顺序是:先创建 worktree,让它带出一个任务分支,然后在这个分支里让 Claude 修改代码。

合并时的顺序是反过来的:先确认 worktree 里的改动已经提交,再回到主工作区,把这个任务分支合回主分支。不要在还没看 diff、没跑验证的时候急着合并。

删除时也有顺序:先删除 worktree,再删除对应分支。因为分支还被 worktree 占用时,Git 不允许直接删除这个分支。

worktree 默认不会复制部分文件

如:

  • .env
  • .env.local
  • 其他没有被 Git 跟踪的文件

worktree checkout 的是 Git 管理的内容。没有提交、没有被跟踪,或者被 .gitignore 忽略的文件,不会自动出现在新的 worktree 里。

如果希望 Claude 创建 worktree 时顺便带上某些本地文件,可以在项目根目录创建 .worktreeinclude

比如:

.env
.env.local

这样这些文件会被复制到 Claude 新建的 worktree 里,避免每次进去都要手动补环境文件。

重复的 node_modules

node_modules 是在 gitignore 里的,默认不会被复制到 worktree 里。

每个 worktree 都是一个独立目录,所以如果在每个 worktree 里都安装依赖,就会各自生成一份 node_modules,很快占用大量磁盘空间。

可以在 Claude 配置里让这些目录使用 symlink:

{
  "worktree": {
    "symlinkDirectories": ["node_modules"]
  }
}

这样新 worktree 里不会再复制一整份 node_modules,而是链接到原目录。node_modules这类体积大、可再生成、通常不需要进入 Git 的目录,比较适合用这种方式处理。