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

Git:LFS、LazyGit、Gitea、Gogs、GitButler、Foregjo、FastGithub、Tangled、Codeberg、CNB

概述

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

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

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

事实上,鄙人于2015~16年接触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文件gitlfs track"*.pt"# 或直接编辑.gitattributesvim.gitattributes# 加入Gitgitadd.gitattributes# 常规Git操作:git add、commit、push


.gitattributes文件示例:

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

撤销LFS跟踪:

gitlfs untrack"*.pt"gitrm--cached"*.pt"

--depth

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

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

如下图,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

清晰、模块化的架构,通过不同的层分离关注点:

实战

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

scoopinstalllazygit chocoinstalllazygit brewinstalllazygitsudoaptinstalllazygit

Gitea

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

功能特性:

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

实战

安装

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

Gogs

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

GitButler

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

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

功能清单

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

Foregjo

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

FastGithub

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

功能

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

FastGithub为每台不同的主机生成自颁发CA证书,保存在cacert文件夹下。客户端设备需要安装和无条件信任自颁发的CA证书,请不要将证书私钥泄露给他人,以免造成损失。

工作原理:在本地电脑上创建一个安全的问路服务,而不是将流量发送到某个服务器,隐私和安全方面,可相对放心。

实战

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

实测结果,之前没有开启代理,打开GitHub很慢,关闭代理并使用FastGitHub,速度确实快很多,几百毫秒响应速度。

不使用代理,git clone也有将近10M的速度。

要知道,无良房东没算在房租里的宽带不过100M,下载速度还需要除以10:

和使用代理时的响应速度几乎没有区别:

此外还可通过Docker Compose安装:

gitclone https://github.com/creazyboyone/FastGithub.gitcdFastGithubdockercompose up-d

Tangled

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

基本概念:

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

功能特性:

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

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

实战

注册

点击个人头像

新建

string和Git Snippet功能定位类似,用于记录和存储代码片段。

下面创建一个Repo:

查看Repo:

和Git Repo类似,不过高度精简(功能简陋),毕竟目前还是alpha版本。

Codeberg

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

CNB

Cloud Native Build简写,官网,理念:一切皆为代码,官方文档

技术

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

相关文章:

  • M.2接口硬件设计全解析:从协议、信号完整性到实战避坑指南
  • 蚌埠网站建设文章:中小企业如何打造高转化率的数字名片与品牌护城河
  • 从零开始:OpCore-Simplify如何让黑苹果配置变得像搭积木一样简单
  • 探秘成都高新区规划建设局网站:深度解析政务服务平台的便民之道与城市未来
  • 指纹识别技术革命:FingerJetFX OSE如何用开源算法重塑生物识别边界
  • Simulink仿真中电感矩阵奇异值问题的诊断与解决
  • 如何高效使用Calibre:电子书格式转换与管理完全指南
  • 从Windows迁移到Ubuntu:完整桌面系统安装与配置实战指南
  • 网络安全入门:识别十类高危网址与构建个人防护体系
  • 一文读懂全双工语音交互:NemotronLabs-VoiceChat-11B-mlx-bf16如何实现边听边说
  • 飘窗内开内倒窗选购安装全攻略:密封、安全与空间兼得
  • 镇江网站建设一般多少钱?揭秘价格背后的那些事儿,老板们别再当冤大头了
  • Stillcolor终极指南:3分钟解决Mac视觉疲劳,让你的眼睛重获新生!
  • STM32 USART2 DMA通信:解放CPU实现高效串口数据传输
  • 如何利用IDM与第三方工具实现网盘高速下载?2026最新网盘提速方案
  • 常州网站建设czyzj企业如何打造高转化官网并避开那些坑
  • 深度解析BPfold架构:12层Transformer如何突破RNA结构预测瓶颈
  • 深度解析Cangaroo:开源CAN FD总线分析工具的完整实战指南
  • C语言速成指南:从核心概念到实战项目,掌握底层编程精髓
  • 终极指南:3步配置LunaTranslator游戏翻译工具,轻松玩转视觉小说实时翻译
  • 前端进入网站建设公司怎么样?给想转行或刚入行小白的真心话与避坑指南
  • 情感设定提示词:为AI输出注入情感温度
  • 终极指南:如何利用AI视觉模型构建智能视频分析系统
  • UnifoLM-VLM-Base深度解析:革命性Vision-Language-Action框架如何重塑人形机器人操控
  • GPT-imagev2灰度实测:中文多模态AI的图像生成与API集成指南
  • 如何通过LX Music聚合音源解决音乐平台碎片化难题:技术分析与解决方案
  • 杭州观建设计网站如何重新定义本土美学与数字体验的融合
  • SpringBoot+Vue足球青训管理系统架构设计与实践
  • Codex 明明说任务完成了,为什么项目还是跑不起来?从代码修改到测试验收一次排查
  • 企业级系统依赖管理解决方案:VisualCppRedist AIO实施指南