前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >git worktree 命令

git worktree 命令

作者头像
海拥
发布2023-03-09 15:37:42
4740
发布2023-03-09 15:37:42
举报
文章被收录于专栏:全栈技术全栈技术

概述

git worktree 命令允许你同时使用和/或管理多个工作树。

那么什么是工作树呢?你已经在使用一个,只是你可能不知道。或者你可以将其称为“工作副本”。

当你以经典方式克隆存储库(或使用创建新存储库git init)时,git 将创建所谓的“主工作树”:

1..git它克隆文件夹中的“裸”存储库 2.它在裸存储库之上创建了一个主工作树;你可能已经知道的只是“克隆存储库的文件夹”

例如:

代码语言:javascript
复制
$ git clone git@github.com:bsrz/mvvm.git
Cloning into 'mvvm'...
remote: Enumerating objects: 131, done.
remote: Counting objects: 100% (131/131), done.
remote: Compressing objects: 100% (79/79), done.
remote: Total 131 (delta 56), reused 109 (delta 38), pack-reused 0
Receiving objects: 100% (131/131), 474.84 KiB | 2.53 MiB/s, done.
Resolving deltas: 100% (56/56), done.

$ cd mvvm
$ ls -la
total 32
drwxr-xr-x  11 bsrz  staff    352 Feb 28 23:30 ./
drwxr-xr-x  25 bsrz  staff    800 Feb 28 23:30 ../
drwxr-xr-x  12 bsrz  staff    384 Feb 28 23:31 .git/
-rw-r--r--   1 bsrz  staff   2171 Feb 28 23:30 .gitignore
drwxr-xr-x   4 bsrz  staff    128 Feb 28 23:30 .img/
-rw-r--r--   1 bsrz  staff   1069 Feb 28 23:30 LICENSE
drwxr-xr-x   5 bsrz  staff    160 Feb 28 23:30 MVVM/
drwxr-xr-x   5 bsrz  staff    160 Feb 28 23:30 MVVM.xcodeproj/
drwxr-xr-x   4 bsrz  staff    128 Feb 28 23:30 MVVMTests/
drwxr-xr-x   4 bsrz  staff    128 Feb 28 23:30 MVVMUITests/
-rw-r--r--   1 bsrz  staff  22913 Feb 28 23:30 README.md

你可以看到该.git文件夹​​,上一层(即当前目录)包含提交到存储库的所有文件,即工作树或工作副本。

为什么?

你是否曾遇到过这样的情况,你修改了文件,有人(也许是你的领导)要求你调查生产代码中的错误?或者,也许你正在对数百(或数千!)个修改文件进行重大重构,但你被要求快速完成另一项任务?

如果是这样,那么你将熟悉“我将提交所有我在 WIP 中拥有的东西”方法或隐藏管理地狱。

同时检查一个以上的分支不是梦想吗?这就是为什么。

工作树

让我们尝试与之前相同的示例,但使用工作树:

代码语言:javascript
复制
$ mkdir mvvm # 1
$ cd mvvm # 2
$ git clone --bare git@github.com:bsrz/mvvm.git .bare # 3
Cloning into bare repository '.bare'...
remote: Enumerating objects: 131, done.
remote: Counting objects: 100% (131/131), done.
remote: Compressing objects: 100% (79/79), done.
remote: Total 131 (delta 56), reused 109 (delta 38), pack-reused 0
Receiving objects: 100% (131/131), 474.84 KiB | 2.43 MiB/s, done.
Resolving deltas: 100% (56/56), done.

1.首先创建将包含所有分支和裸存储库的目录 2.将目录更改为新创建的目录 3.这是这里的关键部分,你想克隆一个裸版本的存储库;这或多或少只是克隆了.git通常由经典克隆方法自动完成的文件夹

接下来,我们将创建主要工作树。这是通过使用git worktree add向裸存储库注册新工作树的方法来完成的:

代码语言:javascript
复制
$ cd .bare # 1
$ git worktree add ../main main # 2
Preparing worktree (checking out 'main')
HEAD is now at 0db2467 <commit message>
$ cd ../main # 3
$ ls -la # 4
total 36
drwxr-xr-x  11 bsrz  staff    352 Feb 28 23:53 ./
drwxr-xr-x   4 bsrz  staff    128 Feb 28 23:53 ../
-rw-r--r--   1 bsrz  staff     61 Feb 28 23:53 .git
-rw-r--r--   1 bsrz  staff   2171 Feb 28 23:53 .gitignore
drwxr-xr-x   4 bsrz  staff    128 Feb 28 23:53 .img/
-rw-r--r--   1 bsrz  staff   1069 Feb 28 23:53 LICENSE
drwxr-xr-x   5 bsrz  staff    160 Feb 28 23:53 MVVM/
drwxr-xr-x   5 bsrz  staff    160 Feb 28 23:53 MVVM.xcodeproj/
drwxr-xr-x   4 bsrz  staff    128 Feb 28 23:53 MVVMTests/
drwxr-xr-x   4 bsrz  staff    128 Feb 28 23:53 MVVMUITests/
-rw-r--r--   1 bsrz  staff  22913 Feb 28 23:53 README.md

1.将目录更改为裸存储库 2.将主要工作树添加到 mvvm 文件夹,比裸存储库高一级;🗒️ 这种结构纯属个人选择,你可以在任何你想要的地方克隆存储库,并在任何你想要的地方签出分支 3.将目录更改为新创建的工作树 4.存储库中提交的文件以与以前相同的方式显示 你可以像以前一样在主目录中工作。你可以检出其他分支,你可以存储修改过的文件,你可以提交文件,你可以变基,合并等等…

裸存储库的强大之处在于它们能够添加第二个、第三个、第 N 个工作树并检查其中的另一个分支。

代码语言:javascript
复制
$ cd ../.bare # 1
$ git worktree add --track ../my-awesome-branch -b my-awesome-branch # 2
Preparing worktree (new branch 'my-awesome-branch')
branch 'my-awesome-branch' set up to track 'main'.
HEAD is now at 0db2467 <commit message>
$ cd ../my-awesome-branch # 3

1.回到裸仓库 2.添加一个新的工作树,这次我们创建一个新的分支并跟踪它 3.将目录更改为新的工作树

现在,您可以在修改 my-awesome-branch 工作树(使用 my-awesome-branch 分支)的同时修改主工作树(使用主分支)。同样的功能适用于新的工作树:你可以检查其他分支,你可以存储修改后的文件,你可以提交文件,你可以变基,合并等等…

这里唯一需要注意的是,一个分支一次只能在一个工作树中签出。如果您尝试检出一个已经在不同工作树中检出的分支,您将收到此错误:

代码语言:javascript
复制
$ git checkout main
fatal: 'main' is already checked out at '/Users/bsrz/Developer/mvvm/main'

结论

虽然我并不经常使用这种方法,但我开始越来越多地使用它。让我的工作保持原样并在单独的文件夹中开始新工作的能力给了我很大的灵活性,并减少了很多“git 管理”工作。我不再需要不断地管理存储或保存补丁以备后用,这让我可以很快地花时间解决新问题。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-03-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 为什么?
  • 工作树
  • 结论
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档