news 2026/7/13 16:49:10

Git进阶:gh、gh-aw、worktree、Submodule

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Git进阶:gh、gh-aw、worktree、Submodule

之前写过很多篇Git相关文章:

  • Git使用笔记
  • Git Tag
  • Git Cherry Pick
  • Git clone/pull/push需要输入密码解决方法
  • GitHub使用技巧
  • Git:进阶、衍生

gh

GitHub官方开源(GitHub,43.6K Star,8.2K Fork)的基于Go开发的CLI工具,将GitHub的核心功能带到终端,支持问题管理、拉取请求、版本发布等完整工作流程。官网,官方文档。

gh提供非常完整的GitHub命令行操作集合,涵盖仓库管理、问题追踪、拉取请求、Gist、扩展管理等多个方面。​

类别命令功能描述常用参数/示例
仓库管理gh repo仓库相关操作查看、创建、克隆、fork仓库
gh repo view查看仓库信息gh repo view owner/repo
gh repo create创建新仓库gh repo create --public --clone
gh repo clone克隆仓库gh repo clone owner/repo
gh repo forkFork仓库gh repo fork owner/repo --clone
gh repo list列出用户仓库gh repo list --limit 50
问题管理gh issue问题相关操作创建、查看、列出、关闭问题
gh issue list列出问题gh issue list --label bug --state open
gh issue create创建问题gh issue create --title "Bug" --body "描述"
gh issue view查看问题详情gh issue view 123
gh issue close关闭问题gh issue close 123 --comment "已修复"
gh issue reopen重新打开问题gh issue reopen 123
拉取请求gh pr拉取请求操作创建、查看、合并、检查PR
gh pr create创建PRgh pr create --title "功能" --body "描述"
gh pr list列出PRgh pr list --state open --author @me
gh pr view查看PR详情gh pr view 456 --web
gh pr checkout检出PR分支gh pr checkout 456
gh pr diff查看PR差异gh pr diff 456
gh pr merge合并PRgh pr merge 456 --squash
gh pr status查看PR状态gh pr status
gh pr checks查看PR检查gh pr checks 456
gh pr review提交PR审查gh pr review 456 --approve
Gist管理gh gistGist相关操作创建、查看、编辑、删除Gist
gh gist create创建Gistgh gist create file.txt --public
gh gist list列出Gistgh gist list --limit 20
gh gist view查看Gistgh gist view abc123
gh gist edit编辑Gistgh gist edit abc123 file.txt
gh gist delete删除Gistgh gist delete abc123
扩展管理gh extension扩展管理安装、升级、移除扩展
gh extension install安装扩展gh extension install owner/gh-extension
gh extension list列出扩展gh extension list
gh extension upgrade升级扩展gh extension upgrade all
gh extension remove移除扩展gh extension remove extension-name
版本发布gh release版本发布创建、查看、下载发布
gh release create创建发布gh release create v1.0.0 --notes "发布说明"
gh release list列出发布gh release list --limit 10
gh release view查看发布gh release view v1.0.0
gh release download下载发布gh release download v1.0.0
gh release delete删除发布gh release delete v1.0.0 --yes
工作流管理gh workflowGitHub Actions工作流查看、运行工作流
gh workflow list列出工作流gh workflow list
gh workflow view查看工作流gh workflow view build.yml
gh workflow run运行工作流gh workflow run build.yml
gh workflow disable禁用工作流gh workflow disable build.yml
gh workflow enable启用工作流gh workflow enable build.yml
运行器管理gh run运行器相关查看运行状态、日志
gh run list列出运行gh run list --workflow build.yml
gh run view查看运行详情gh run view 12345
gh run watch监视运行状态gh run watch 12345
gh run download下载运行产物gh run download 12345
gh run rerun重新运行gh run rerun 12345
认证管理gh auth认证相关登录、登出、状态检查
gh auth login登录GitHubgh auth login --with-token
gh auth logout登出gh auth logout
gh auth status查看认证状态gh auth status
gh auth refresh刷新令牌gh auth refresh
配置管理gh config配置管理设置、获取配置
gh config set设置配置gh config set git_protocol ssh
gh config get获取配置gh config get editor
gh config list列出所有配置gh config list
别名管理gh alias命令别名设置、查看、删除别名
gh alias set设置别名gh alias set bugs 'issue list --label bug'
gh alias list列出别名gh alias list
gh alias delete删除别名gh alias delete bugs
API调用gh api直接调用GitHub API灵活调用REST API
gh api调用API端点gh api /user
gh api graphql调用GraphQL APIgh api graphql -f query='{ viewer { login } }'
浏览器gh browse在浏览器中打开打开仓库、PR、Issue等
gh browse打开当前仓库gh browse
gh browse --issues打开Issues页面gh browse --issues
gh browse --pr 456打开特定PRgh browse --pr 456
gh browse --wiki打开Wiki页面gh browse --wiki
gh browse --settings打开设置页面gh browse --settings
代码片段gh codespaceCodespace管理创建、列出、删除
gh codespace list列出Codespacegh codespace list
gh codespace create创建Codespacegh codespace create --repo owner/repo
gh codespace delete删除Codespacegh codespace delete codespace-name
密钥管理gh secretSecrets管理设置、列出、删除秘密
gh secret set设置秘密gh secret set MY_TOKEN -b"token-value"
gh secret list列出秘密gh secret list
gh secret delete删除秘密gh secret delete MY_TOKEN
环境管理gh environment环境管理查看、配置环境
gh environment list列出环境gh environment list
gh environment view查看环境详情gh environment view production
缓存管理gh cacheActions缓存管理查看、删除缓存
gh cache list列出缓存gh cache list
gh cache delete删除缓存gh cache delete cache-key
搜索功能gh search搜索GitHub内容搜索仓库、代码、议题等
gh search repos搜索仓库gh search repos "react hooks" --language=JavaScript
gh search code搜索代码gh search code "useState" --repo=facebook/react
gh search issues搜索议题gh search issues "bug" --state=open
gh search prs搜索PRgh search prs "feature" --author=octocat
项目板管理gh project项目管理查看、创建项目
gh project list列出项目gh project list --owner org
gh project view查看项目gh project view 123
gh project create创建项目gh project create --title "新项目"
团队管理gh team团队管理查看、管理团队
gh team list列出团队gh team list --org github
gh team view查看团队gh team view engineering
通知管理gh notification通知管理查看、管理通知
gh notification list列出通知gh notification list
gh notification view查看通知gh notification view 123
gh notification mark标记通知gh notification mark --read 123
赞助管理gh sponsor赞助管理查看、管理赞助
gh sponsor list列出赞助者gh sponsor list
gh sponsor view查看赞助详情gh sponsor view octocat
帮助信息gh help帮助信息查看命令帮助
gh help显示帮助概览gh help
gh help <command>查看命令帮助gh help pr
gh help --web在浏览器中打开帮助gh help pr --web
版本信息gh version版本信息显示gh版本
gh version显示版本号gh version
gh upgrade升级ghgh upgrade

高级功能

  • 脚本和自定义
    • API调用:直接调用GitHub API进行自动化操作
    • 自定义别名:为常用命令创建快捷方式
    • 输出格式化:支持JSON、YAML等格式输出
  • 企业支持
    • GitHub Enterprise:连接到企业版GitHub
    • 认证管理:支持多种认证方式

实战

提供多种安装方式:

  • 官网或GitHub Release页面下载
  • 命令行
brewinstallgh

使用示例:

# 登录GitHub帐户进行身份验证gh auth login gh authlogoutgh auth refresh gh auth setup-git# 设置首选编辑器gh configseteditor<editor># 为常用命令设置别名ghaliassetghaliaslist ghaliasimportghaliasdelete gh issue list ghprcreate# 在Visual Studio Code中打开一个代码空间gh codespace code# 将SSH密钥添加到GitHub帐户gh ssh-keyaddgh gist clone gh gist create gh gist delete gh gist edit gh gist list gh gistrenamegh gist view

gh-aw

官网,GitHub官方开源(GitHub,4.2K Star,329 Fork)的一款基于gh的扩展,全称为gh-aw(GitHub CLI extension for AWS),核心是打通GitHub CLI与AWS的操作链路,让开发者可直接通过gh命令行一站式管理与GitHub集成的AWS资源,无需切换多个工具或终端会话。

核心特点

  • 工具集成化:将GitHub CLI与AWS CLI能力融合,统一操作入口,减少跨工具切换成本;
  • 场景聚焦:针对GitHub与AWS协同的核心场景(如AWS资源与GitHub仓库/Action联动、身份认证打通等)做轻量化适配;
  • 命令轻量化:基于gh扩展体系设计,命令语法贴合gh生态习惯,开发者无需重新学习全新命令逻辑;
  • 官方:由GitHub官方维护,兼容性和安全性有保障,适配GitHub生态的最新特性;
  • 易安装扩展:遵循gh extension标准安装方式(gh extension install github/gh-aw),秒级完成部署使用;
  • 云资源联动:简化GitHub Actions调用AWS资源、GitHub仓库关联AWS服务(如CodeBuild、ECR等)的配置与操作流程。

worktree

实现:同一个仓库,开多个工作目录,同时在不同分支干活,互不打扰。

优势:

  • 完全隔离:每个目录之间文件互不干扰,告别冲突。
  • 共享历史:所有worktree共享同一个Git历史,commitbranchremote完全同步。
  • 告别git stash:你的工作现场被原封不动地保留。
  • 零上下文切换开销:AI 助手在每个环境中都保持完整的记忆。
  • 从根源上杜绝提交错分支:你不可能在ml-project-bugfix目录里把代码提交到feature分支。

共享仓库对象 + 独立工作区状态:

  • 提交历史、对象库这些核心内容是共享的。
  • 每个 worktree 有自己独立的HEADindex和工作目录状态。
  • 所以你可以在 A 目录做 feature,在 B 目录修 hotfix,不用反复来回切分支。

流程示例:

gitworktreeadd-bemergency-fix../temp mastercd../temp# 修Bug然后提交gitcommit-a-m"emergency fix"cd-gitworktree remove../temp

命令行:

  • add:创建新 worktree
  • list:查看所有 worktree
  • remove:删除 worktree
  • move:移动 worktree 目录
  • lock/unlock:锁定或解锁(防止被误删或被 prune)
  • prune:清理失效的 worktree 元数据
  • repair:手动移动目录后修复链接关系

规则

  • Git 默认不让同一个分支同时在多个 worktree 被 checkout:保护机制,不是限制你发挥。它是在防止你自己把分支状态写乱。
  • --force在某些场景下要用两次:如操作一个“已锁定”的 worktree,文档明确说可能需要--force --force。不是Bug,是有意提高危险操作门槛。

解决三个高频痛点:

  • 任务切换成本:以前切任务是“清现场 + 切分支 + 祈祷不冲突”。现在是“切目录”。任务边界从逻辑层落到了物理层。
  • 上下文隔离:不同 worktree 对应不同任务,目录就是上下文。你一进目录就知道自己在干什么,不容易串台。
  • 自动化友好:当你用脚本或 AI agent 并行跑任务时,worktree 是天然隔离单元。每个Agent绑一个目录,冲突明显下降。

进阶

  • 参数:如果你要写脚本解析 git worktree list,别拿默认输出硬切字符串。
    官方给稳定机器可读格式:--porcelain,再配-z处理特殊字符路径。

  • --worktree配置
    默认情况下,多个worktree共享仓库配置。
    但有些配置你不想共享,如某个目录专用sparse-checkout或行为开关。
    文档建议开启extensions.worktreeConfig,用git config --worktree写入当前工作区配置。
    一句话:共享该共享的,隔离该隔离的。

checkout场景整体仍有实验性质,submodule支持也并不完整。能不用superproject多重checkout就别硬上,至少先在团队里做小范围验证。

适用场景:

  • 安全的框架迁移(无痛重构)
# 从Spring Security迁移到Sa-Tokengitworktreeadd../SaToken-migration-bexperiment/SaToken-migration maincd../SaToken-migration

问题

  • 每个worktree都有一套 Python或Node.js依赖,太占硬盘空间。

解决方案:使用共享的虚拟环境或容器化技术。

# 方案一:共享 Conda 环境 (推荐)conda create-nml-sharedpython=3.10conda activate ml-shared pipinstall-rrequirements.txt# 在所有 worktree 中都激活这个共享环境cd../ml-project-training&&conda activate ml-sharedcd../ml-project-inference&&conda activate ml-shared# 方案二:Poetry/pnpm 等自带缓存共享的包管理器poetry config cache-dir /shared/poetry-cache poetryinstall# 会使用共享的依赖缓存# 方案三:Docker 与共享卷dockerrun-v$(pwd):/workspace-vml-packages:/opt/conda/lib/python3.10/site-packages python:3.10

高级玩法:

# 使用 Git 内置的垃圾回收和去重功能gitrepack-ad# (高阶操作,慎用!) 在 worktree 间共享 node_modules# 只适用于那些只读的依赖ln-s../../myapp-main/node_modules ./node_modules# 使用 pnpm 这类天生支持依赖共享的包管理器pnpminstall# 自动共享依赖包
  • 不同的机器学习 worktree 之间数据和模型发生冲突。

训练分支污染了生产分支的数据。

解决方案: 使用隔离的数据路径和模型版本管理工具。

# 为每个 worktree 设置不同的环境变量exportDATA_PATH=/data/training-experimentsexportMODEL_PATH=/models/training-v1exportDATA_PATH=/data/inference-productionexportMODEL_PATH=/models/production-v2# 或者用 Docker 卷进行数据隔离dockerrun--nameml-training-env-vtraining-data:/data-vtraining-models:/models python:3.10dockerrun--nameml-inference-env-vinference-data:/data-vproduction-models:/models python:3.10# 使用 MLflow 等模型注册中心进行版本管理mlflow server --backend-store-uri sqlite:///training.db --default-artifact-root ./training-artifacts mlflow server --backend-store-uri sqlite:///production.db --default-artifact-root ./production-artifacts
  • 每个 worktree 的包版本不一致,导致环境混乱。

解决方案: 使用锁文件(lockfiles)和版本固定。

# 创建新 worktree 后,第一时间复制锁文件cprequirements.txt../myapp-feature/cppoetry.lock../myapp-feature/# 或者在安装时就固定版本pipinstall--save-exacttorch==2.0.0torchvision==0.15.0

工作流自动化脚本

一键创建Worktree工作区

#!/bin/bash# 保存为: create-worktree.shif[$#-eq0];thenecho"用法:$0<分支名> [基于哪个分支]"exit1fiBRANCH_NAME=$1BASE_BRANCH=${2:-main}REPO_NAME=$(basename$(git rev-parse --show-toplevel))WORKTREE_PATH="../${REPO_NAME}-${BRANCH_NAME}"# 创建 worktreegitworktreeadd-b"$BRANCH_NAME""$WORKTREE_PATH""$BASE_BRANCH" # 进入目录并设置环境 (根据你的项目修改) cd "$WORKTREE_PATH" pip install -r requirements.txt # 或者 npm install # 创建一个任务描述文件,方便 AI 理解 echo"# 任务: $BRANCH_NAME## 描述:[在这里写下你的任务描述]## 需要修改的文件:-## 完成标准:-" > TASK.md # 用VS Code打开 code . echo "Worktree创建成功:$WORKTREE_PATH" echo "任务文件已创建: TASK.md" echo "可以开始召唤 AI 助手了!"

自动化清理脚本

#!/bin/bash# 保存为: cleanup-worktrees.shecho"正在清理已合并的 worktree..."# 遍历所有 worktree,但不包括主目录gitworktree list|grep-v"$(gitrev-parse --show-toplevel)"|whileread worktree branch commit;do# 提取纯粹的分支名branch_name=$(echo$branch|sed's/\[//g'|sed's/\]//g')# 检查分支是否已经合并到 mainifgitbranch--mergedmain|grep-q"$branch_name";thenecho"正在移除已合并的 worktree:$worktree($branch_name)"gitworktree remove"$worktree"gitbranch-d"$branch_name"fidoneecho"清理完成!"

https://github.com/evmts/tevm-monorepo仓库,.claude/commands目录还有更多高级玩法。

AI与worktree

允许并行运行多个AI会话,每个会话都有自己独立的上下文。再也不用切换上下文。

AI的上下文来源:

  • 文件系统感知:当前打开的文件、项目结构、目录组织
  • Git历史集成:最近的提交记录、分支关系、变更模式
  • 依赖理解:包管理文件(如requirements.txt)、导入关系、环境配置
  • 对话记忆:你的指令、偏好和正在进行的讨论
  • 代码模式识别:编码风格、架构决策、命名约定

应用场景其一模型对决:A/B测试不同AI的实现

gitworktreeadd../ml-claude-implementation-bexperiment/claude-automl maingitworktreeadd../ml-codex-implementation-bexperiment/codex-automl main# 决定采用哪个方案gitadd-A# 回到主项目cd../ml-projectgitmerge experiment/claude-automl# 清理战场gitworktree remove../ml-claude-implementationgitbranch-dexperiment/claude-automl

Submodule

在浏览GitHub源码仓库时,经常会看到如下链接符号

点击文件夹,跳转到另一个GitHub仓库。

分析:这是Git子模块(Submodule)的GitHub页面的可视化表现,不是普通文件夹。

子模块是Git的一种功能,允许将一个Git仓库嵌套在另一个Git仓库中;父仓库不包含子模块的实际代码,只存储子模块仓库的URL和特定提交的SHA值。

如果代码库有隐藏文件.gitmodules,就表明其含有字模块,内容示例:

[submodule "rapidjson"] path = rapidjson url = https://github.com/Tencent/rapidjson.git

那SHA值呢?

git clone后,根据本地.git/modules/config文件

命令行使用

# 初始化子模块gitsubmodule init# 添加子模块,git submodule add <子模块URL> <子模块目录>。默认使用子模块仓库的名称作为路径gitsubmoduleadd<子模块URL><子模块目录># 执行git clone,并添加为子目录https://github.com/Tencent/weui# 执行git clone,并重命名文件夹https://github.com/Tencent/weui myui# 更新子模块gitsubmodule update# 递归更新子模块(及其子模块)gitsubmodule update--recursive--remote# 列出子模块gitsubmodule# 检查子模块状态gitsubmodule status# 移除子模块gitsubmodule deinit[<path>]gitrm[<path>]

在一个不含有子模块的代码库里,执行git submodule init命令,看起来没有任何效果,既不会产生.gitmodules文件,也不会生成.git/modules/<folder>隐藏文件夹。

重命名效果图

并同步修改.gitmodules文件。

子模块嵌套效果图

更新子模块:当子模块的维护者提交更新后,使用子模块的项目必须手动更新才能包含最新提交。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/13 16:46:56

异步 API,比如 setTimeout , setInterval , requestIdleCallback 和requestAnimationFrame 还有 Promise ,这几个的区别?

面试先给结论这几个都和“异步调度”有关&#xff0c;但它们不属于同一类机制&#xff0c;区别主要在&#xff1a;进入哪种任务队列执行时机是否和浏览器渲染相关是否会重复执行适合什么场景可以先用一句话概括&#xff1a;setTimeout / setInterval 属于宏任务调度&#xff1b…

作者头像 李华
网站建设 2026/7/13 16:46:11

基于C语言实现(控制台)小型超市管理系统

♻️ 资源 大小&#xff1a; 3.96MB ➡️ 资源下载&#xff1a;https://download.csdn.net/download/s1t16/87450305 注&#xff1a;更多内容可关注微信公众号【神仙别闹】&#xff0c;如当前文章或代码侵犯了您的权益&#xff0c;请私信作者删除&#xff01; 小型超市管理 …

作者头像 李华
网站建设 2026/7/13 16:45:26

TMR-SOMA-RP-v1:NVIDIA革命性文本到动作检索模型完全指南

TMR-SOMA-RP-v1&#xff1a;NVIDIA革命性文本到动作检索模型完全指南 【免费下载链接】TMR-SOMA-RP-v1 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/TMR-SOMA-RP-v1 TMR-SOMA-RP-v1是NVIDIA推出的革命性文本到动作检索&#xff08;Text-to-Motion Retrieval&a…

作者头像 李华
网站建设 2026/7/13 16:42:55

如何免费解锁WeMod高级功能:Wand-Enhancer终极完整指南

如何免费解锁WeMod高级功能&#xff1a;Wand-Enhancer终极完整指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer 想要免费享受WeMod专业版的所有…

作者头像 李华
网站建设 2026/7/13 16:42:24

深度解析Confucius4-TTS-mlx-int8架构:从T2S到BigVGAN的完整技术栈

深度解析Confucius4-TTS-mlx-int8架构&#xff1a;从T2S到BigVGAN的完整技术栈 【免费下载链接】Confucius4-TTS-mlx-int8 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/Confucius4-TTS-mlx-int8 Confucius4-TTS-mlx-int8是一款基于Apple Silicon优化的…

作者头像 李华