ILD

git worktree
作者:Herbert Yuan 邮箱:yuanjp@hust.edu.cn
发布时间:2018-5-26 站点:Inside Linux Development

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足够表明该工作树。


Copyright © linuxdev.cc 2017-2024. Some Rights Reserved.