在 Git 中使用多个工作树
你是否曾经为了处理其他事情而重复克隆过 git 仓库?或者你是否曾经为了集中精力解决生产环境中刚刚报告的 bug 而不得不存储所有更改,或者快速提交?
无论您是否遇到过这种情况(这种情况可能会发生),了解所使用的工具能够提供什么总是好的。
Git 工作树
初始化本地 git 仓库后,只有一个工作树,$ git init
即通过克隆仓库初始化的那个。在任何给定时间,本地仓库中都只有一个分支被检出。
该分支仍然可以随意更改,来回更改。但是,如果您想同时检出两个分支,可以再次克隆仓库到另一个目录,从而再次下载所有内容。但这感觉有点麻烦,甚至有点过头了,不是吗?
添加另一个工作树
幸运的是,git 提供了添加多个(链接)工作树的功能,而不需要另一个远程存储库的克隆。
在本地 git 存储库中,以下命令为现有分支添加新的工作树:
$ git worktree add ../another-folder-for-your-new-working-tree branch-ref
之后,您将拥有一个新文件夹,您可以将编辑器或 IDE 指向该文件夹并在现有分支上工作。
新的工作树实际上链接到您现有的本地仓库,因此始终保持同步。这意味着几乎所有内容都在原始本地仓库和每个创建的工作树之间共享,从而节省了磁盘空间。
您还可以直接在新的工作树中检出新的分支:
$ git worktree add --track -b a-new/branch ../another-folder-for-your-new-worktree origin/branch-to-branch-away-from
### for example:
$ git worktree add --track -b bugfix/foo ../project-x-bugfix-foo origin/master
清理
如果你想清理你的工作树,你可以直接通过调用
$ git worktree remove ../folder-of-your-working-tree
此类工作树目录也可以手动删除。但是,实际仓库中的某些管理文件不会被删除。可以在本地仓库中使用以下命令:
$ git worktree prune
您仍然可以轻松摆脱那些现在不必要的管理文件。
结论
链接工作树是一个非常好的功能,可以随时检出代码库中的多个阶段、版本或分支。
我一直使用它们来减少在分支之间切换所需的时间,有时还可以保持编辑器的第二个(甚至第三个)实例运行,以便更轻松地比较代码的各个部分。它们在代码审查时也非常有用,因为可以轻松检出要审查的分支,从而支持审查流程。
不妨尝试一下,也许工作树可以帮助您提高效率!
更多信息
如果您想了解更多,请查看官方 git 文档!
编辑历史
@joanis正确地指出了我的排序--b --track
错误。--track -b
这才是正确的顺序。现在帖子里的顺序已经正确了!