当前位置: 首页 > news >正文

Git:进阶、衍生

概述

有没有想过或算过,你使用Git有几年啦?如果你还是一个Git新手,请参考:

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

如果不是,请想一想,这么多年过去,对于Git的使用是不是还停留在那么几条命令行。

事实上,鄙人于2015~16年接触Git,自认为是一个比较敏感的技术宅,但还是有很多新特性或功能,不熟悉、没用过甚至没听过。

真的是:知道的越多,越发现知道的越少。

本文汇总一些Git进阶玩法,可能停留在概念和名词层面。

Git

Git LFS

经常在HF或ModelScope官网等平台看到git lfs命令行。实际上,HF和MS的远程模型仓库就是一个由Git LFS管理的Git仓库。

LFS是Large File Storage的缩写,即大文件存储。官网,GitHub。基于Golang实现,通过对Git客户端进行扩展的方式,集成并兼容原生Git客户端。

Git LFS为了解决大文件托管的效率问题,提供五大特性:

  • 更大:支持GB级别的大文件版本控制;
  • 更小:让Git仓库空间占用减小;
  • 更快:仓库的克隆和拉取更快;
  • 透明:Git使用上对用户完全透明;
  • 兼容:权限控制上完全兼容(兼容Codeup权限控制)。

安装:

  • Git LFS已集成在Git for Windows中,直接下载和使用最新版本Git即可;
  • 官网下载可执行程序,如Windows平台的git-lfs-windows-v3.7.1.exe,在Git仓库下执行命令:
# 执行下述命令自动新增/编辑.gitattributes文件
git lfs track "*.pt"
# 或直接编辑.gitattributes
vim .gitattributes
# 加入Git
git add .gitattributes
# 常规Git操作:git add、commit、push

在这里插入图片描述
.gitattributes文件示例:

*.pt filter=lfs diff=lfs merge=lfs -text

撤销LFS跟踪:

git lfs untrack "*.pt"
git rm --cached "*.pt"

--depth

经常看到类似于git clone --depth 2 https://github.com/jesseduffield/lazygit.git这种用法,即--depth N

Git中用于实现浅克隆(shallow clone)的参数,只克隆仓库的最新N+1次提交(即最近N+1个 commit),而不下载完整提交历史。

如下图,N=2
在这里插入图片描述
git log只能看到3次commit,即N+1,有些资料说N次,是错误的。
在这里插入图片描述
git branch -a也只能看到3个分支,对于Lazygit这种大型项目,显然不可能只有一个(远端)分支:
在这里插入图片描述
用途和优势:

  • 节省时间和带宽:无需下载整个Git历史(尤其是大型项目历史可能达几百MB甚至GB),只拉取当前代码快照;
  • 节省磁盘空间:本地只保留一个浅层历史,适合只需要当前代码而不需要历史记录的场景(如 CI/CD、临时构建、只读使用等);
  • 加快克隆速度:对于只需要构建或查看最新代码的用户非常高效。

限制:

  • 默认情况下,无法访问历史提交、无法切换到旧分支(除非该分支的最新提交也在浅层范围内);
  • 不能执行某些依赖完整历史的操作,如git log只显示N+1条记录,git blame可能受限。

如果想追溯提交历史,可通过git fetch --unshallow完整克隆,或git fetch --depth=N追加N次提交。

Git Reset

Git Reset可将当前Git分支(HEAD)移动到指定提交状态,并支持使暂存区和工作目录与之同步。

git reset命令包含三种模式:

  1. --soft:移动HEAD指针。仅移动HEAD的指向目标,暂存区和工作目录内容保持不变。例如git reset --soft HEAD~将指针回退一个提交;
  2. --mixed:更新暂存区,默认模式。将HEAD指向的提交状态同步到暂存区,但保留工作目录的现有内容;
  3. --hard:同步工作目录。将移动HEAD指针、重置暂存区,并使工作目录完全匹配目标提交。执行git reset --hard HEAD~后,指针位置、暂存文件和工作文件均将回退到旧提交状态。

在这里插入图片描述

Git Worktree

GitHub

GitHub也有很多新功能、特性。

Codespace

在这里插入图片描述

在这里插入图片描述

Lazygit

一款开源(GitHub,67.9K Star,2.3K Fork)的Git终端界面工具,使用Go语言编写,可直观地将复杂的Git操作可视化,让开发人员不用再去记忆那些繁琐的Git命令。可通过界面操作的方式,快速地进行拉取分支、切换分支、提交变更等操作。大大提高代码管理的效率。

功能:

  • 指定行暂存:可以在选定的行上按空格键将其暂存,或者按v键开始选择一列行,同时还可以按a选择当前行的所有内容。
  • 重置工作区:清除某个未提交的内容,可使用shift+d打开重置菜单,然后选择nuke选项。
  • 自定义命令:根据个人习惯。
  • 工作树:可同时运行多个分支,无需切换分支时存储,使用w键就可以从所选分支工作树切换到该分支。
  • 撤销:可使用z键撤销上一个操作,然后使用ctrl+z进行重做。
  • 提交图:支持所有提交以图表的形式展现,非常方便查看内容,使用+_循环切换屏幕来显示提交图表,并且会有颜色区分。
  • 对比两次提交:支持不同的两次提交进行内容比对,使用shift+w选中某个分支,然后标记这个分支,然后再选择其他分支与这个分支进行diff。

清晰、模块化的架构,通过不同的层分离关注点:
在这里插入图片描述

实战

提供各种平台的多种安装方式:

scoop install lazygit
choco install lazygit
brew install lazygit
sudo apt install lazygit

FastGithub

一款开源(GitHub,491 Star,150 Fork)小巧的便携小工具,无需安装,解压开箱即用。

功能

  • 提供域名的纯净IP解析;
  • 提供IP测速并选择最快的IP;
  • 提供域名的tls连接自定义配置;
  • google的CDN资源替换,解决大量国外网站无法加载js和css的问题。

FastGithub为每台不同的主机生成自颁发CA证书,保存在cacert文件夹下。客户端设备需要安装和无条件信任自颁发的CA证书,请不要将证书私钥泄露给他人,以免造成损失。
在这里插入图片描述
工作原理:在本地电脑上创建一个安全的问路服务,而不是将流量发送到某个服务器,隐私和安全方面,可相对放心。

实战

从GitHub Release页面下载fastgithub-win-x64.zip,解压缩,双击FastGithub.UI.exe即可。

实测结果,之前没有开启代理,打开GitHub很慢,关闭代理并使用FastGitHub,速度确实快很多,几百毫秒响应速度。
在这里插入图片描述
不使用代理,git clone也有将近10M的速度。
在这里插入图片描述
要知道,无良房东没算在房租里的宽带不过100M,下载速度还需要除以10:
在这里插入图片描述
和使用代理时的响应速度几乎没有区别:
在这里插入图片描述
此外还可通过Docker Compose安装:

git clone https://github.com/creazyboyone/FastGithub.git
cd FastGithub
docker compose up -d

Gogs

官网,一款开源(GitHub,47.2K Star,5.1K Fork)极易搭建的自助 Git 服务。官方提供在线体验平台,需注册方能使用。

Tangled

官网,一款基于AT Protocol协议构建的Git社交协作平台。

基本概念:

  • Knot:节点,小型无头(headless)服务器,可用于托管Git仓库和相关元数据;可简化Git操作;每个Knot都能独立托管仓库,也能与其他节点互联,形成一个开放的代码协作网络。可部署于Raspberry Pi、个人NAS、服务器上;可单人使用,也可供多人共享。
  • DID:Decentralized ID,去中心化标识符,

功能特性:

  • 轻量级Git仓库托管
    • 使用Knots在个人基础设施上托管Git仓库;
    • 可添加好友到您的 Knots,或邀请协作者加入您的仓库;
    • 采用细粒度的基于角色的访问控制进行保护;
    • 使用SSH进行推送和拉取操作。
  • 改进的拉取请求模型:直观高效的基于轮次的拉取请求流程,支持轮次间的差异比较。使用Jujutsu的变更 ID 堆叠拉取请求。粘贴 git diff 或 git format-patch 即可快速进行变更推送。

使用 Spindle 在您自己的基础设施上运行流水线–Spindle 是一款轻量级的 Cl运行器。它原生支持 Nix 进行包管理,并且可以轻松扩展以支持不同的执行后端。

实战

注册
在这里插入图片描述
点击个人头像
在这里插入图片描述
新建
在这里插入图片描述
string和Git Snippet功能定位类似,用于记录和存储代码片段。

下面创建一个Repo:
在这里插入图片描述
查看Repo:
在这里插入图片描述
和Git Repo类似,不过高度精简(功能简陋),毕竟目前还是alpha版本。

Foregjo

官网,开源(codeberg,3K Star,523 Fork),官方提供在线体验平台,需注册方能使用。

Codeberg

官网,基于Foregjo、类似于GitHub、但免费代码托管平台。

Gitea

官网,开源(GitHub,52K Star,6.2K Fork),在线体验,也可通过SaaS形式使用。

功能特性:

  • 轻量高效,性能爆表:Go语言编写的轻量级服务,对服务器资源占用极小,这让自建私有Git变得前所未有的简单。
  • 功能齐全,开箱即用:包括代码仓库、PR(Pull Request)、Issue(工单)、Wiki等在内的所有核心功能。无需额外配置,开箱即用。
  • 数据主权,安全可控:作为自托管工具,所有代码都存储在个人服务器上,数据不上云。

实战

安装

使用
仓库(创建、管理)、用户(创建、邀请);协作:使用Issue来跟踪项目进度,使用Wiki来编写项目文档,使用Pull Request来进行代码合并。

GitButler

官网,开源(GitHub,16.9K Star,708 Fork)的Git客户端,引入虚拟分支(Virtual Branches)概念,允许开发者同时工作在多个功能分支上而无需物理切换分支。

技术栈:Rust、Tauri(可用于为所有主要桌面平台构建微小的、极速的二进制文件的框架)、Svelte(UI框架)。

功能清单

  • 虚拟分支
    • 解决问题:传统Git操作需频繁切换分支或git stash保存临时改动,导致上下文切换成本高;
    • 功能亮点:
      • 并行开发:在同一工作目录中创建多个虚拟分支,每个分支独立管理文件改动,无需物理切换分支;
      • 智能归属:代码更改自动关联到对应虚拟分支,用户可通过拖拽将文件或代码片段分配到不同分支;
      • 实时冲突检测:当多个虚拟分支修改同一文件时,界面高亮冲突区域并提供解决建议,避免合并时才暴露问题;
      • 无缝转真实分支:虚拟分支可一键转换为标准Git分支,单独推送到远程仓库或创建PR。
  • 智能提交:
    • 自动生成语义化提交信息(基于OpenAI API分析代码差异),未来版本计划支持本地LLM模型;
    • 自动创建描述性分支名,如fix/login-button-alignment
  • 拖放式提交管理:通过拖拽操作撤销、合并或修改提交记录,替代复杂git rebase -i命令;
  • 操作时间线:记录所有操作历史,支持回溯和撤销,降低误操作风险;
  • GitHub深度集成:
    • 一键认证登录,直接管理PR、查看分支状态;
    • 自动生成SSH密钥并上传至GitHub,简化配置流程。
  • 多账户管理:支持同时关联多个GitHub账号,方便跨项目协作
  • 工作流优化
    • 紧急中断处理:开发功能时发现Bug,可直接在新虚拟分支修复并独立推送,无需提交半成品代码;
    • 跨分支代码测试:直接在工作目录应用他人的远程分支改动,快速验证问题;
    • 探索性编程:创建临时虚拟分支尝试不同方案,保留有效代码路径。

CNB

Cloud Native Build简写,官网,官方文档

技术

  • 声明式的构建环境:通过声明构建环境,可以确保任务在特定的环境中进行构建,避免由于环境差异而导致的问题,并提供可靠的构建过程。
  • 声明式的构建缓存:当缓存声明为copy-on-write模式时,可以实现缓存的写时复制,在并发场景下,无需再担心缓存读写冲突问题。
  • Docker作为任务的运行环境:使用Docker技术来提供一个环境,以便执行特定的任务,使任务的执行环境更加可控和可靠。
  • 基于Docker生态的插件:将通用能力抽离为Docker插件,通过Docker生态进行高效分发,开发者之间相互帮助,去中心化的协作。
  • 按需快速获取资源:通过runner.cpus按需声明需要的CPU资源,最高可达64核。
  • 云原生开发:基于云原生构建的远程开发解决方案,借助读秒克隆技术,只需一不小心,点击云原生开发按钮,短短几秒,工作区便准备就绪,远程接入即可进行编码工作。启动速度,看起来飞快,其实一点也不慢。
  • 读秒克隆技术:基于OverlayFS的git-clone-yyds,可在数秒内完成代码准备,使得开发人员能够更快地获取代码。哪怕是100GB以上的超大仓库,也能秒级准备,在高并发场景下,更是快到离谱。
http://www.dtcms.com/a/609264.html

相关文章:

  • 深度智能体的中间件
  • 中文分词全切分算法
  • 11月10日ES本机
  • 网络营销的基本职能医院seo是什么
  • PLB-TV 影视!无广告 + 4K 高清
  • 网站背景自动变色做简历比较好的网站
  • 播放PCM音频增益低+单独增强PCM解码的方案
  • C++篇(16)C++11(下)
  • 全新ZipArchives插件:可在ONLYOFFICE协作空间中解压ZIP文件
  • 【PRML】支持向量机
  • 龙岩网站建设哪里比较好长春网站排名优化公司
  • 服务器建设网站软件下载南京站建设
  • 重组融合蛋白技术概述
  • Java_自定义泛型类/接口/方法
  • EG2106 高端电压600V 半桥MOS管栅极驱动芯片技术解析
  • 上位机开发之JSON文件编辑器(动态UI)
  • Git 本地操作入门:版本控制基础、跨平台部署与仓库核心流程
  • Docker 缓存优化:通过 cpolar 内网穿透服务远程管理 Redis
  • 微算法科技(NASDAQ MLGO)在委托权益证明DPoS主链上引入PoW轻节点验证,提升抗量子攻击能力
  • 前缀和与差分数组
  • 微官网和移动网站区别网站设计行业前景
  • dw网站的站点建设阿里巴巴网站图片怎么做
  • 智慧判官-分布式编程评测平台
  • 基于 HT 技术的汽车制造车间数字孪生可视化系统
  • TOMCAT Docker 容器化部署指南
  • 自己做网站去哪买服务器天猫网站设计
  • React Native 自定义 ScrollView 滚动条:开箱即用的 IndicatorScrollView(附源码示例)
  • Java Web核心数据交互技术全解析
  • UML建模工具Enterprise Architect在DevOps中如何实现架构模型同步
  • 数据库-MYSQL作业五