首页 > 其他分享 >git-worktree

git-worktree

时间:2023-07-13 15:11:16浏览次数:43  
标签:git worktree master build local ccc

1.说明git-worktree

git worktree 非常适合大型项目又需要维护多个分支,想要避免来回切换的情况

  • 优点

    • git worktree 可以快速进行并行开发,同一个项目多个分支同时并行演进

    • git worktree 的提交可以在同一个项目中共享

    • git worktree 和单独 clone 项目相比,节省了硬盘空间,又因为git worktree使用hard link实现,要远远快于 clone

2.新增工作目录add

  • 最简单的写法:
    git worktree add <新路径>
    将基于当前分支,新建一个 worktree 目录,新的分支名就是新建目录的名称。
  • 新建一个指定分支
    git worktree add <新路径> -b <新分支名>
    将基于当前分支,新建一个 worktree 目录,新的分支名是指定的名称。
  • 基于指定分支新建一个指定分支
    git worktree add <新路径> -b <新分支名> <指定分支名>
    将基于指定分支,新建一个 worktree 目录,新的分支名是指定的名称。

2-1.切换出指定分支

git worktree add ../<path_name> <branch>

2-1-1.查看元素工作目录

git worktree list
/Users/project_local/build  11669902 [release-1.3.x]

2-1-2.创建工作目录

git worktree add ../build_master master 
Preparing worktree (checking out 'master')
HEAD is now at 5d6f19ef xxxx to branch master

2-1-3.查看元素工作目录

git worktree list
/Users/project_local/build         11669902 [release-1.3.x]
/Users/project_local/build_master  5d6f19ef [master]

2-1-4.切换到build_master

cd ../build_master && git br
* master
+ release-1.3.x

2-1-5.查看branch信息

git branch -vv
* master        5d6f19ef [origin/master] 5d6f19ef xxxx to branch master
+ release-1.3.x 11669902 (/Users/project_local/build) [origin/release-1.3.x: behind 18] xxxx to branch release-1.3.x

2-2.-b/-B使用

git worktree add -b/-B <new_branch> ../<path_name> <branch>

  • -b:如果有相同的分支名时,不会生成
  • -B:如果有相同的分支名时,会把原来的覆盖变为worktree

2-2-1.使用-b切换

如果新建的分支名已经存在的话会报错

2-2-1-1.查看分支

git br
  ccc
+ master
* release-1.3.x

2-2-1-2.新建一个已有的分支名

git worktree add -b ccc ../build_ccc release-1.3.x
Preparing worktree (new branch 'ccc')
fatal: A branch named 'ccc' already exists.

2-2-1-3.新建一个不存在的分支名

git worktree add -b ddd ../build_ddd release-1.3.x
Preparing worktree (new branch 'ddd')
HEAD is now at 11669902 xxxxx to branch release-1.3.x

2-2-1-4.查看分支

cd ../build_ddd && git br
  ccc
* ddd
+ master
+ release-1.3.x

2-2-2.使用-B切换

如果新建分支名已经存在,会强制改变该分支

2-2-2-1.查看分支

git br
  ccc
+ master
* release-1.3.x

2-2-2-2.新建一个已有的分支名

git worktree add -B ccc ../build_ccc master
Preparing worktree (resetting branch 'ccc'; was at 5d6f19ef)
HEAD is now at 5d6f19ef xxxxx to branch master

2-2-2-3.查看分支

git br
+ ccc
+ master
* release-1.3.x

3.删除worktree

3-1.remove

移除一个工作区。只有干净的工作区(没有未跟踪的文件和未修改的跟踪文件)可以被删除。

脏工作区或有子模块的工作区可以用 -f 删除。主工作区不能被删除。

git worktree remove [-f] <path_name>

  • -f:强制执行

3-1-1.查看worktree

git worktree list
/Users/project_local/build          11669902 [release-1.3.x]
/Users/project_local/build_ccc_new  5d6f19ef [ccc]
/Users/project_local/build_ddd      11669902 [ddd]
/Users/project_local/build_master   5d6f19ef [master]

3-1-2.删除某个worktree

git worktree remove build_ddd

3-1-3.查看worktree

git worktree list
/Users/project_local/build          11669902 [release-1.3.x]
/Users/project_local/build_ccc_new  5d6f19ef [ccc]
/Users/project_local/build_master   5d6f19ef [master]

3-2.prune

修剪$GIT_DIR/worktrees中的工作区信息。如果工作目录被手动删除了rm

git worktree prune [-n] [-v] [--expire <time>]

  • -n:在使用prune时,不会删除任何文件;只会报告它要删除的东西。

  • -v:使用prune,报告所有的移除情况。

  • --expire <time>:使用 prune,只对超过<时间>未使用的工作区进行淘汰。

3-2-1.查看文件夹

cd ../ && ls -al
drwxr-xr-x   46 root  staff      1472 Jul 13 10:44 build
drwxr-xr-x   50 root  staff      1600 Jul 13 11:33 build_ccc_new
drwxr-xr-x   50 root  staff      1600 Jul 13 10:47 build_master

3-2-2.删除worktree文件夹

rm -rf build_ccc_new build_master

3-2-3.查看worktree

cd build && git worktree list 
/Users/project_local/build          11669902 [release-1.3.x]
/Users/project_local/build_ccc_new  5d6f19ef [ccc]
/Users/project_local/build_master   5d6f19ef [master]

3-2-4.使用prune

3-2-4-1.不删除,只查看

git worktree prune -n
Removing worktrees/build_master: gitdir file points to non-existent location
Removing worktrees/build_ccc: gitdir file points to non-existent location

3-2-4-2.删除并输出内容

git worktree prune -v
Removing worktrees/build_master: gitdir file points to non-existent location
Removing worktrees/build_ccc: gitdir file points to non-existent location

3-2-4-3.删除

git worktree prune

3-2-5.查看worktree

git worktree list
/Users/project_local/build  11669902 [release-1.3.x]

4.修改move

git worktree move <path_name> <new_path_name>

4-1.案例

4-1-1.查看worktree

git worktree list  
/Users/project_local/build         11669902 [release-1.3.x]
/Users/project_local/build_ccc     5d6f19ef [ccc]
/Users/project_local/build_ddd     11669902 [ddd]
/Users/project_local/build_master  5d6f19ef [master]

4-1-2.修改worktree

git worktree move build_ccc ../build_ccc_new

4-1-3.查看worktree

git worktree list
/Users/project_local/build          11669902 [release-1.3.x]
/Users/project_local/build_ccc_new  5d6f19ef [ccc]
/Users/project_local/build_ddd      11669902 [ddd]
/Users/project_local/build_master   5d6f19ef [master]

5.查看list

git worktree list [--porcelain]

  • porcelain:详细显示

5-1.案列

5-1-2.普通显示

git worktree list
/Users/project_local/build         11669902 [release-1.3.x]
/Users/project_local/build_ccc     5d6f19ef [ccc]
/Users/project_local/build_ddd     11669902 [ddd]
/Users/project_local/build_master  5d6f19ef [master]

5-1-2.porcelain显示

git worktree list --porcelain
worktree /Users/project_local/build
HEAD 116699020d67237a27cafe67ef92128ff4d5d5e8
branch refs/heads/release-1.3.x

worktree /Users/project_local/build_ccc
HEAD 5d6f19efe800908192b9b94ac6362bd81db9daac
branch refs/heads/ccc

worktree /Users/project_local/build_ddd
HEAD 116699020d67237a27cafe67ef92128ff4d5d5e8
branch refs/heads/ddd

worktree /Users/project_local/build_master
HEAD 5d6f19efe800908192b9b94ac6362bd81db9daac
branch refs/heads/master

6.加锁/解锁worktree

6-1.lock

这也可以防止它被移动或删除。 可以选择用--reason选项来指定锁定的原因

git worktree lock [--reason <string>] <worktree>

  • --reason:说明信息

6-1-1.无提示的锁

git worktree lock <path_name>

6-1-1-1.给build_ccc加锁

git worktree lock build_ccc

6-1-1-2.移除build_ccc

报错信息中没有lock reason

git worktree remove build_ccc
fatal: cannot remove a locked working tree;
use 'remove -f -f' to override or unlock first

6-1-2.增加信息reason

git worktree lock <path_name> <--reason="msg">

6-1-2-1.给build_ccc加锁并添加信息

git worktree lock --reason="test lock" build_ccc

6-1-2-2.移除build_ccc

无法删除,提示报错信息

git worktree remove build_ccc
fatal: cannot remove a locked working tree, lock reason: test lock
use 'remove -f -f' to override or unlock first

6-2.unlock

解锁一个工作区,允许它被修剪、移动或删除。

git worktree unlock <path_name>

# 给build_ccc解锁
git worktree unlock build_ccc

标签:git,worktree,master,build,local,ccc
From: https://www.cnblogs.com/lxd670/p/17550490.html

相关文章

  • Git 基础入门
    Git基础入门一、安装与配置1.下载安装https://git-scm.com/download/ 2.使用入口win:右键菜单—gitbashmac:终端窗口 3.基础配置a.首次使用添加身份说明,使用以下两个命令:$gitconfig--globaluser.name"你的昵称"$gitconfig--globaluser.email邮箱 b.......
  • 常用gitignore
    #file.build.cmake-build-debug.idea#Prerequisites*.d#CompiledObjectfiles*.slo*.lo*.o*.obj#PrecompiledHeaders*.gch*.pch#CompiledDynamiclibraries*.so*.dylib*.dll#Fortranmodulefiles*.mod*.smod#CompiledStaticlibraries*.lai*.la*.a*.lib#......
  • 如何实现r语言做logit回归的具体操作步骤
    R语言做Logit回归Logit回归是一种常用的统计分析方法,可以用来研究二元分类问题。它可以对因变量的概率进行建模,并利用自变量的线性组合来预测分类结果。本文将介绍如何使用R语言进行Logit回归分析,并给出相应的代码示例。数据准备首先,我们需要准备用于Logit回归分析的数据。考虑......
  • Git备忘录
    环境:Windows安装Git下载地址:https://git-scm.com/download配置Git安装完成后需要配置,开始菜单打开“GitCMD”或右键打开“OpenGitBashhere”。配置用户名和提交用到的邮箱#配置用户名gitconfig--globaluser.name"xxx"#配置邮箱gitconfig--globaluser.email......
  • Git小白到老鸟的进阶之路
    小白:师兄,师兄,上次你教我的操作,我傻乎乎的执行了一遍,可是那个Git究竟是什么那?师兄:小白莫慌,Git就是一种版本控制,小白,你平时写论文,是不是也按日期保存成许多的版本那。小白:对呀,对呀。师兄:那开发项目的时候,每个人开发的部分都不一样,需要记录多个版本,这个就是我们伟大的Git做得。小白:师......
  • 常用git指令
    常用git指令一.gitpull相关将远程指定分支拉取到本地指定分支上gitpullorigin<远程分支名>:<本地分支名>将远程分支拉倒当前分支gitpullorigin<远程分支名>将与本地当前分支名相同的远程分支拉到本地当前分支(需要先关联远程分支)gitpull......
  • TechSmith Snagit mac最强大的屏幕截图软件
    TechSmithSnagitMac版是一款强大的屏幕截图软件,适用于Mac操作系统。它提供了多种截图工具和编辑功能,可以帮助用户轻松地创建高质量的截图和录屏视频。→→↓↓载TechSmithSnagitmac 以下是TechSmithSnagit的一些主要特点:多种截图方式:TechSmithSnagit支持多种截图方式......
  • GIT常用命令
    常用命令查看状态gitstatus拉取远程分支gitfetch/gitfetch—all拉取远程分支并同步本地分支gitfetchorigin拉取远程分支并与本地代码合并gitpull/gitpullorigin远程仓库强行覆盖本地gitfetchgitreset--hardorigin/gitpull本地上传远程仓库git......
  • TortoiseGit v2.60
    TortoiseGit在大年初二迎来了大版v2.60Released:2018-02-17ThisisplannedtobethelastversioncompatiblewithMsysGit1.9.5(i.e.,GitforWindows<1.9.5).==Features==*Fixedissue#3089:ShowparentSHA1oncherrypickingamergecommit*Fixedi......
  • (一)Git 学习之为什么要学习 Git
    一、版本控制1.1何为版本控制版本控制(Revisioncontrol)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录、备份,以便恢复以前的版本的软件工程技术。版本控制其实最重要的是可以记录文件的历史修改记录,从而让用户能够查看历史版本,方......