git wortree 管理多个工作树
语法
1 2 3 4 5 6 7 | git worktree add [-f] [--detach] [--checkout] [--lock] [-b <new-branch>] <path> [<commit-ish>] git worktree list [--porcelain] git worktree lock [--reason <string>] <worktree> git worktree move <worktree> <new-path> git worktree prune [-n] [-v] [--expire <expire>] git worktree remove [--force] <worktree> git worktree unlock <worktree> |
描述
管理附加到同一个仓库的多个工作树。
一个git仓库能够支持多个工作树,允许你一次checkout多个分支。使用git worktree add 来添加一个新的工作树。这个新的工作树叫做linked working tree,相对的叫做main working ree,由git init或者git clone准备。一个仓库有一个main working tree(假如它不是一个bare repository),0个或多个linked working tree.
当你不再使用linked working tree时,可以删除它。仓库中工作树的管理文件将逐渐被删除。或者你也可以在main或者任何linked工作树运行git worktree prune来清除过期的管理文件。
如果一个linked working tree存储可移动设备或者网络共享上,可以使用git worktree lock来阻止管理文件被删除。
命令:
git worktree add <path> [<commit-ish>]
创建path目录,并checkout commit-ish到那个目录,新的工作目录将link进当前仓库。分享所有东西,除了和工作树相关的文件,如HEAD, index等。
如果<commit-ish>是一个分支名,也不存在该分支,且没有指定-b或者-B或者--detach,但是存在一个tracking branch。这等价于:
git worktree add --track -b <branch> <path> <remote>/<branch>
git worktree list
列出每个工作树。
git worktree lock <worktree>
锁定工作树,防止其管理文件被删除。对于位于可移动介质上的工作树使用。
git worktree move
移动工作树,包含子模块的工作树不能被移动
git worktree prune
删除$GIT_DIR/worktrees里面的过期工作树信息。
git worktree remove
删除一个工作树,只有干净的工作树可以删除(没有untracked文件,tracked文件没有被修改)。可以使用--force强制删除
git worktree unlock
解锁一个工作树,允许它被pruned, moved或者deleted。
选项:
-f
--force
默认,add拒绝创建一个新的工作树,当<commit-ish>是一个分支名,且已经被另外一个工作树checked out。remove拒绝删除一个不干净的工作树。这个选项允许这些操作。
-b <new-branch>
-B <new-branch>
当添加时,创建一个新的分支,从<commit-ish>开始。checkout新的分支到新的工作树。-b拒绝创建新的分支,如果它已存在的话。-B则重置branch到<commit-ish>
--detach
add的选项,新的工作树detach HEAD.
--[no-]checkout
不checkout,便于后续手动checkout,或者sparse-checkout
--[no-]track
当创建新的分支时,如果<commit-ish>是一个分支,将它标记为upstream。
--lock
add的选项,创建后将其上锁。
-n
--dry-run
prune的选项,不要删除任何东西,只是报告他们。
-v
--verbose
prune的选项,报告所有的删除。
--expire <time>
prune的选项,过期比time老的未用的工作树。
--reason <string>
lock的选项,给出lock的原因。
<worktree>
工作树被定义位路径,可以是相对路径也可以是绝对路径。
如果路径的最后一部分在所有的工作树中是唯一的,可以用它来表示工作树。如 /abc/def/ghi /abc/def/ggg,可以使用ghi或者/def/ghi足够表明该工作树。