git worktree 命令

2023-03-09 15:37:42 浏览数 (1)

概述

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 文件夹,比裸存储库高一级;

0 人点赞