Go MVC框架对比
Beego
github https://github.com/astaxie/beego
优点:
- 很全很简单
- 不仅追求性能,同样追求开发效率,解放程序员的生产力
- 社区良好,中文开发者很多,找资料很方便
- 代码文档化做的很优秀
缺点:
- 比较臃肿,因为提供了很多支持,当遇到坑时需要花很多时间查源码解决问题
- 模块众多,这既是优点也是缺点
Echo
github https://github.com/labstack/echo
优点:
- 路由性能高
- 更轻量级的web开发框架
缺点:
- 调试不方便,报错信息不友好
- 路由性能虽高,但是路由实现的算法底层不支持路由排序,会引起路由冲突
Gin
官网 https://gin-gonic.github.io/gin
github https://github.com/gin-gonic/gin
优点:
- 封装比较好,API友好,源码注释比较明确,具有快速灵活,容错方便等特点
- 运行速度快,分组的路由器,良好的崩溃捕获和错误处理,非常好的支持中间件和 json
缺点:
- 封装比较好,API友好,源码注释比较明确,具有快速灵活,容错方便等特点
- 运行速度快,分组的路由器,良好的崩溃捕获和错误处理,非常好的支持中间件和 json
Iris
github https://github.com/kataras/iris
优点:
- 是社区驱动的Go语言Web 框架,支持http2,完备 MVC 支持。
- 极简主义风格
- 社区活跃度和文档支持都非常到位
缺点:
- 不够稳定,社区里有人反馈:最新的release版本是alpha版非常不稳定
- 支持Iris的人很多,但是目前仍然不如Gin和Echo多
物联网国标
GB/T 35134-2017 物联网智能家居 设备描述方法
GB/T 35143-2017 物联网智能家居 数据和设备编码
GB/T 35317-2017 公安物联网系统信息安全等级保护要求
GB/T 35318-2017 公安物联网感知终端安全防护技术要求
GB/T 35319-2017 物联网 系统接口要求
GB/T 35419-2017 物联网标识体系 Ecode在一维条码中的存储
GB/T 35420-2017 物联网标识体系 Ecode在二维码中的存储
GB/T 35421-2017 物联网标识体系 Ecode在射频标签中的存储
GB/T 35422-2017 物联网标识体系 Ecode的注册与管理
GB/T 35423-2017 物联网标识体系 Ecode在NFC标签中的存储
GB/T 35592-2017 公安物联网感知终端接入安全技术要求
GB/T 35136-2017 智能家居自动控制设备通用技术要求
GB/T 35255-2017 LED公共照明智能系统接口应用层通信协议
GB/T 35291-2017 信息安全技术 智能密码钥匙应用接口规范
GB/T 30269.502-2017 信息技术 传感器网络 第502部分:标识:传感节点标识符解析
GB/T 30269.602-2017 信息技术 传感器网络 第602部分:信息安全:低速率无线传感器网络网络层和应用支持子层安全规范
GB/T 30269.801-2017 信息技术 传感器网络 第801部分:测试:通用要求
GB/T 30269.803-2017 信息技术 传感器网络 第803部分:测试:低速无线传感器网络网络层和应用支持子层
GB/T 35129-2017 面向食品制造业的射频识别系统 环境适应性要求
GB/T 35130-2017 面向食品制造业的射频识别系统 射频标签信息与编码规范
GB/T 35135-2017 面向食品制造业的射频识别系统 应用要求
GB/T 17626.6-2017 电磁兼容 试验和测量技术 射频场感应的传导骚扰抗扰度
GB/T 35290-2017 信息安全技术 射频识别(RFID)系统通用安全技术要求
GB/T 35120-2017 制造过程物联的数字化模型信息交换规范
GB/T 35122-2017 制造过程物联的数字化模型信息表达规范
GB/T 35128-2017 集团企业经营管理信息化核心构件
GB/T 34966.1-2017 卫星导航增强信息互联网传输 第1部分:播发体制
GB/T 34966.2-2017 卫星导航增强信息互联网传输 第2部分:接口要求
GB/T 34966.3-2017 卫星导航增强信息互联网传输 第3部分:数据传输格式
GB/T 35403.1-2017 国家物品编码与基础信息通用规范 第1部分:总体框架
GB/T 35589-2017 信息技术 大数据 技术参考模型
计算机视觉资源全览
第一部分:10种核心计算机视觉算法及其应用
计算机视觉算法是让机器“看懂”世界的关键。以下是10种最核心的算法及其典型应用场景。
| 算法类别 | 核心描述 | 典型应用场景 |
|---|---|---|
| 1. 卷积神经网络 (CNN) | 专为图像设计的深度学习模型,通过卷积层自动提取特征。 | 图像分类(ImageNet)、人脸识别、医疗影像分析。 |
| 2. 边缘检测 | 识别图像中像素强度发生显著变化的边界。常用算法:Canny, Sobel。 | 目标轮廓提取、图像分割、自动驾驶中的车道线检测。 |
| 3. Haar级联分类器 | 基于Haar特征和级联结构的快速检测算法,采用滑动窗口。 | 实时人脸检测、监控系统中的行人检测。 |
| 4. 霍夫变换 | 用于检测图像中特定几何形状(如直线、圆)的算法。 | 车道线检测、交通标志(圆形)识别。 |
| 5. 光流法 | 计算视频序列中像素点的运动矢量场。常用算法:Lucas-Kanade。 | 视频稳定、运动目标跟踪、行为分析。 |
| 6. 特征点检测与匹配 | 检测并描述图像中的关键点(如SIFT, SURF, ORB),用于匹配不同图像。 | 图像拼接(全景图)、物体识别、增强现实(AR)。 |
| 7. 图像分割 | 将图像划分为具有相似属性的区域。方法包括:聚类、GrabCut、全卷积网络(FCN)。 | 医学图像分析(器官分割)、背景虚化/更换、自动驾驶场景理解。 |
| 8. 生成对抗网络 (GAN) | 由生成器和判别器组成,通过对抗训练生成逼真数据。 | 图像生成、老照片修复、艺术风格迁移。 |
| 9. 目标检测 | 定位并识别图像中的多个物体,输出边界框和类别。代表模型:YOLO, Faster R-CNN, SSD。 | 安防监控、自动驾驶(车辆/行人检测)、零售商品识别。 |
| 10. 深度卷积生成对抗网络 (DCGAN) | 结合CNN与GAN的架构,用于生成更高质量的图像。 | 高分辨率图像合成、数字艺术创作、数据增强。 |
代码示例:使用OpenCV运行YOLO进行目标检测
1 | import cv2 |
第二部分:16个顶级计算机视觉开发库
选择合适的工具库能极大提升开发效率。以下是当前最流行和强大的计算机视觉库。
| 库名称 | 主要特点与描述 | 适用场景与语言 |
|---|---|---|
| 1. OpenCV | 最古老、最全面的开源计算机视觉库,提供2500+种优化算法。 | 通用:图像处理、目标检测、人脸识别等。支持 C++, Python, Java。 |
| 2. Scikit-Image | 基于NumPy的图像处理库,是Scikit-Learn的扩展,API设计简洁。 | 学术/研究:图像滤波、分割、特征提取。主要支持 Python。 |
| 3. Pillow (PIL Fork) | Python图像处理标准库,专注于图像文件的打开、操作和保存。 | 基础图像操作:格式转换、缩放、裁剪、绘制。支持 Python。 |
| 4. TorchVision | PyTorch的官方视觉库,提供数据集、模型架构和图像变换工具。 | 深度学习:与PyTorch无缝集成,用于训练和部署CV模型。支持 Python。 |
| 5. MMCV | OpenMMLab项目的基础库,为计算机视觉研究提供统一底层支持。 | 研究框架基础:被MMDetection, MMPose等项目依赖。支持 Python。 |
| 6. YOLO (Ultralytics) | 以速度著称的实时目标检测框架,社区活跃,版本迭代快(已至v8)。 | 实时检测:需要高帧率的目标检测应用。支持 Python。 |
| 7. TensorFlow | Google开发的端到端机器学习平台,拥有庞大的模型生态(TensorFlow Hub)。 | 生产与部署:大型模型训练、跨平台部署(TF Lite, TF.js)。支持多语言。 |
| 8. Keras | 高级神经网络API,以易用性著称,现已成为TensorFlow的官方高阶API。 | 快速原型:让初学者和研究者能快速搭建和实验模型。支持 Python。 |
| 9. MATLAB | 商业数学软件,提供强大的计算机视觉工具箱和Simulink仿真环境。 | 工业与学术:算法开发、仿真、系统设计。付费,支持自身语言。 |
| 10. NVIDIA CUDA-X | NVIDIA的GPU加速库集合,为视觉计算提供底层硬件加速。 | 高性能计算:需要极致速度的图像/视频处理、深度学习推理。 |
| 11. OpenVINO | Intel开发的工具包,用于优化和部署视觉AI推理,支持边缘设备。 | 边缘计算与推理优化:在Intel硬件上高效运行训练好的模型。 |
| 12. PyTorch | 由Facebook主导的深度学习框架,以动态图和灵活性深受研究人员喜爱。 | 研究与实验:需要灵活调整模型结构的研究项目。支持 Python。 |
| 13. Caffe | 早期流行的深度学习框架,以速度和模块化设计闻名,尤其适合视觉任务。 | 传统CV项目与部署:一些老项目仍在使用,部署较成熟。支持 C++/Python。 |
| 14. Detectron2 | Facebook AI Research (FAIR) 开发的基于PyTorch的目标检测与分割库。 | 前沿研究:实现Mask R-CNN, DensePose等先进模型。支持 Python。 |
| 15. SimpleCV | 一个让计算机视觉变得简单的框架,旨在降低OpenCV等库的使用门槛。 | 教育与入门:适合初学者理解概念,无需深入底层细节。支持 Python。 |
| 16. Kornia | 基于PyTorch的可微分计算机视觉库,将传统CV操作集成到深度学习流程中。 | 可微分视觉:需要在深度学习模型中嵌入传统CV算子的研究。 |
选择建议:
- 初学者/快速上手:从 OpenCV (Python接口) 或 Keras 开始。
- 学术研究/模型实验:PyTorch + TorchVision 或 Detectron2 是主流。
- 工业部署/生产环境:TensorFlow、OpenVINO 或 TensorRT 更成熟。
- 实时目标检测:YOLO 系列是首选。
第三部分:21个经典开源计算机视觉数据集
高质量的数据集是训练和评估模型的基础。以下按字母顺序整理了21个经典数据集。
| 数据集名称 | 简介与规模 | 主要任务与类别 |
|---|---|---|
| 1. COVID-19 X-Ray | 包含6500张胸部X光片,517例COVID-19病例,带有像素级肺部分割掩码。 | 医学图像分析:肺炎分类、肺部区域分割。 |
| 2. CIFAR-10 / CIFAR-100 | 小图像数据集。CIFAR-10: 6万张32x32图,10类。CIFAR-100: 100类,每类600张。 | 图像分类:物体与动物分类,常用于模型基准测试。 |
| 3. ImageNet | 超大规模数据集,超过1400万张手工标注图像,涵盖2万多个类别。 | 图像分类/目标检测:计算机视觉研究的基石。 |
| 4. Kinetics-700 | 大型视频数据集,65万个10秒视频片段,涵盖700个人类动作类别。 | 视频动作识别:人与物、人与人的交互行为。 |
| 5. MNIST | 经典手写数字数据集,6万训练+1万测试,28x28灰度图。 | 图像分类(入门):数字识别,堪称“CV界的Hello World”。 |
| 6. LSUN | 大规模场景理解数据集,近百万图像,对应10个场景和20个物体类别。 | 场景分类/目标检测:室内外场景与物体。 |
| 7. IMDB-Wiki | 最大的人脸数据集之一,52万张名人图像,标注了姓名、性别、年龄。 | 人脸识别/属性分析:身份、年龄、性别识别。 |
| 8. MS COCO | 微软发布的大规模数据集,33万张图像,包含目标检测、分割、字幕等丰富标注。 | 目标检测/实例分割/图像描述:多任务基准数据集。 |
| 9. Labeled Faces in the Wild | 专注于无约束条件下的人脸识别,包含1.3万张人脸图像,标注身份。 | 人脸验证/识别:测试模型在真实场景下的性能。 |
| 10. Cityscapes | 城市街道场景数据集,50个城市,5000帧精细标注,2万帧粗略标注。 | 语义分割/实例分割:自动驾驶场景理解。 |
| 11. LabelMe-12-50k | 包含5万张图像,12个物体类别,图像为中心物体或随机区域。 | 目标识别:通用物体识别。 |
| 12. Places / Places2 | 大规模场景分类数据集。Places: 250万图,205类。Places2: 180万图,365类。 | 场景识别:室内外场景分类。 |
| 13. Visual Genome | 图像理解数据集,10.8万张图像,包含物体、属性、关系等密集标注。 | 视觉推理/场景图生成:超越检测的深层理解。 |
| 14. Stanford Dogs | 狗品种识别数据集,2万余张图像,涵盖120个品种。 | 细粒度图像分类:犬种识别。 |
| 15. Stanford Cars | 汽车型号数据集,1.6万张图像,196个类别(汽车型号)。 | 细粒度图像分类:汽车型号识别。 |
| 16. Cat Dataset | 猫脸关键点数据集,超过9000张猫脸图像,标注9个关键点(眼、耳、嘴)。 | 关键点检测:动物面部特征点定位。 |
| 17. CelebFaces (CelebA) | 名人脸部属性数据集,超过20万张图像,每张标注40种属性和5个关键点。 | 人脸属性识别/ landmark检测。 |
| 18. Face Mask Detection | 口罩佩戴检测数据集,853张图像,3类(戴好/未戴/错误佩戴)及边界框。 | 目标检测:特定场景下的安全检测。 |
| 19. Fire and Smoke Dataset | 火灾与烟雾检测数据集,7000+张高清图像,涵盖多种真实场景。 | 异常检测/目标检测:安防与灾害预警。 |
| 20. FloodNet Dataset | 飓风灾害评估数据集,2343张无人机高清图像,带有灾害损坏的语义标注。 | 语义分割/灾害评估:灾后分析。 |
| 21. Cat Dataset | (注:原文重复,可能指另一个猫相关数据集) |
数据集使用指引:
- 入门学习:MNIST, CIFAR-10 复杂度低,适合练手。
- 通用目标检测/分割:MS COCO, PASCAL VOC 是行业标准。
- 人脸相关:CelebA, LFW 分别适用于属性识别和验证。
- 自动驾驶:Cityscapes, KITTI 提供街景数据。
- 视频理解:Kinetics 是动作识别的主流数据集。
总结
计算机视觉领域资源丰富,从基础算法的理解,到开发库的熟练运用,再到数据集的恰当选择,是逐步深入该领域的三个关键环节。建议初学者遵循“算法原理 -> 工具实践 -> 数据训练”的路径进行系统学习。
未命名
golang.org/x/net/websocket示例
1 | package main |
github.com/gorilla/websocket示例
1 | package main |
WPF
https://blog.csdn.net/maizi314/article/details/103979437
https://blog.csdn.net/wushang923/article/details/9226529
https://www.cnblogs.com/lonelyxmas/p/7979743.html
https://blog.csdn.net/yangyy9611/article/details/17464133
https://lindexi.oschina.io/lindexi/post/WPF-%E4%BD%BF%E7%94%A8%E5%B0%81%E8%A3%85%E7%9A%84-SharpDx-%E6%8E%A7%E4%BB%B6.html
https://blog.csdn.net/weixin_34320159/article/details/86132420
https://blog.csdn.net/wangsunjun/article/details/8894952
https://www.codeproject.com/Articles/15610/Regex-Validation-in-WPF
https://www.cnblogs.com/mantian/p/3816834.html
https://cloud.tencent.com/developer/ask/76782/answer/132738
https://blog.csdn.net/ZZZWWWPPP11199988899/article/details/77620211
https://blog.csdn.net/qq_38888555/article/details/82118505
https://blog.csdn.net/lwwl12/article/details/78472235
https://blog.walterlv.com/post/win10/2017/10/02/wpf-transparent-blur-in-windows-10.html
http://toto0668.blog.163.com/blog/static/30990252201691441716893/
https://blog.csdn.net/catshitone/article/details/78522931
Ubuntu/Debian安装PostgreSQL和TimescaleDB插件
导入pg源及签名
1 | sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' |
导入TimeScalaDB 源及签名
debian版
1 | sh -c "echo 'deb [signed-by=/usr/share/keyrings/timescale.keyring] https://packagecloud.io/timescale/timescaledb/debian/ $(lsb_release -c -s) main' > /etc/apt/sources.list.d/timescaledb.list" |
1 | sh -c "echo 'deb [signed-by=/usr/share/keyrings/timescale.keyring] https://packagecloud.io/timescale/timescaledb/ubuntu/ $(lsb_release -c -s) main' > /etc/apt/sources.list.d/timescaledb.list" |
安装
1 | apt install postgresql-14 |
启动pg
1 | service postgresql start |
创建timescaledb扩展时会报一下错误
1 | FATAL: extension "timescaledb" must be preloaded |
根据提示修改配置文件
1 | echo "shared_preload_libraries = 'timescaledb'" >> /etc/postgresql/14/main/postgresql.conf |
重启pg
1 | service postgresql restart |
再次建立扩展
1 | create extension timescaledb; |
查看已安装好的扩展
1 | \dx |
FFmpeg mp3转pcm
大端数据格式
1 | ffmpeg -i test.mp3 -f s16be -ar 16000 -ac 1 -acodec pcm_s16be pcm16k.pcm |
小端数据格式
1 | ffmpeg -i test.mp3 -f s16le -ar 16000 -ac 1 -acodec pcm_s16le pcm16k.pcm |
说明:
- -acodec pcm_s16be:输出pcm格式,采用signed 16编码,字节序为大尾端(小尾端为le);
- -ar 16000: 采样率为16000
- -ac 1: 声道数为1
Podman常用命令总结
一、Podman 简介:Docker 的现代替代品
1.1 什么是 Podman?
Podman 是一个开源的容器运行时工具,可在大多数 Linux 平台上使用。它旨在提供与 Docker 相似的功能,但采用了更现代、更安全的架构。
1.2 Podman 与 Docker 的核心区别
| 特性 | Docker | Podman |
|---|---|---|
| 守护进程 | 需要 dockerd 守护进程以 root 权限运行 |
无需守护进程,直接与 OCI 运行时交互 |
| 运行权限 | 通常需要 root 权限 | 支持无根(rootless)模式,普通用户可直接运行 |
| 进程模型 | 复杂:dockerd -> containerd -> containerd-shim -> runc |
简洁:podman -> conmon -> runc |
| 安全性 | root 守护进程存在潜在安全风险 | 无 root 守护进程,安全性更高 |
架构对比图:
Podman 直接调用 OCI 运行时(如 runc),通过 conmon(容器监控器)管理容器进程,无需 dockerd 这类以 root 身份运行的守护进程。
1.3 兼容性
Podman 的命令行接口与 Docker 高度兼容,大多数 Docker 命令可以直接替换为 podman。它支持管理和运行任何符合 OCI(开放容器倡议) 规范的容器和镜像,并能无缝使用 Docker Hub 等镜像仓库。
官网:podman.io
二、安装与基础配置
2.1 安装 Podman
在 CentOS/RHEL 8 及更高版本上,Podman 通常是预装的。如需安装:
1 | sudo yum -y install podman |
2.2 配置镜像仓库与加速器
编辑配置文件 /etc/containers/registries.conf:
1 | # 设置镜像搜索源 |
2.3 配置存储驱动(推荐 fuse-overlayfs)
编辑 /etc/containers/storage.conf,确保普通用户模式性能更佳:
1 | [storage] |
三、Podman 常用命令速查
Podman 命令与 Docker 命令高度相似,以下是对照表:
3.1 容器生命周期管理
| 功能 | Docker 命令 | Podman 命令 |
|---|---|---|
| 创建并运行容器 | docker run |
podman run |
| 启动已停止容器 | docker start |
podman start |
| 停止运行中容器 | docker stop |
podman stop |
| 重启容器 | docker restart |
podman restart |
| 终止容器 | docker kill |
podman kill |
| 删除容器 | docker rm |
podman rm |
| 列出容器 | docker ps |
podman ps |
3.2 镜像管理
| 功能 | Docker 命令 | Podman 命令 |
|---|---|---|
| 拉取镜像 | docker pull |
podman pull |
| 列出镜像 | docker images |
podman images |
| 删除镜像 | docker rmi |
podman rmi |
| 构建镜像 | docker build |
podman build |
| 导出镜像 | docker save |
podman save |
| 导入镜像 | docker load |
podman load |
3.3 容器交互与诊断
| 功能 | Docker 命令 | Podman 命令 |
|---|---|---|
| 进入容器 | docker exec |
podman exec |
| 查看日志 | docker logs |
podman logs |
| 检查容器 | docker inspect |
podman inspect |
| 查看进程 | docker top |
podman top |
| 复制文件 | docker cp |
podman cp |
便捷参数:许多命令支持 --latest 或 -l 参数来操作最近创建的容器,避免输入冗长的容器ID。
四、实战操作示例
4.1 运行一个 Web 服务器容器
1 | # 拉取并运行 Apache httpd 容器 |
4.2 构建自定义镜像
- 准备 Dockerfile:
1
2
3FROM docker.io/library/centos:7
RUN yum -y install nginx && yum clean all
CMD ["nginx", "-g", "daemon off;"] - 构建镜像:
1
podman build -t my-nginx:latest .
4.3 推送镜像到仓库
1 | # 1. 为镜像打标签 |
五、高级配置:Rootless(无根)模式
Podman 的核心优势之一是支持普通用户无需 sudo 即可运行容器。
5.1 系统级前提配置
管理员需要在主机上完成以下配置:
安装必要软件:
1
sudo yum -y install slirp4netns fuse-overlayfs shadow-utils
配置用户子UID/GID:
Podman 要求用户在/etc/subuid和/etc/subgid文件中拥有唯一的 UID/GID 范围。1
2
3
4
5
6# 查看现有分配
cat /etc/subuid
cat /etc/subgid
# 为用户 `tom` 分配 UID/GID 范围(管理员操作)
sudo usermod --add-subuids 100000-165535 --add-subgids 100000-165535 tom文件格式为:
用户名:起始UID:数量调整内核参数(允许绑定低端口):
1
2
3
4
5
6# 允许非特权用户绑定 80 及以上端口
echo 'net.ipv4.ip_unprivileged_port_start=80' | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
# 允许非特权用户使用 ping(ICMP)
sudo sysctl -w "net.ipv4.ping_group_range=0 2000000"
5.2 用户级配置
普通用户 tom 登录后,可以创建个人配置文件 ~/.config/containers/ 来覆盖系统默认设置。
5.3 Rootless 模式下的卷挂载
在 rootless 模式下挂载卷时,容器内的文件属主会映射到主机用户的子UID。使用 --userns=keep-id 选项可以让容器内的进程以与主机用户相同的 UID 运行,简化文件权限管理。
1 | # 1. 创建数据目录 |
5.4 Rootless 模式下的端口映射
- 默认:非特权用户只能映射 1024 及以上 的端口。
- 配置后:通过修改
net.ipv4.ip_unprivileged_port_start=80,可以映射 80 及以上 的端口。1
2
3
4
5# 映射 8080 端口(始终允许)
podman run -d -p 8080:80 docker.io/library/httpd
# 映射 80 端口(需上述内核配置)
podman run -d -p 80:80 docker.io/library/httpd
六、故障排除与技巧
6.1 设置命令别名
如果习惯 Docker 命令,可以为 Podman 设置别名实现无缝切换:
1 | echo "alias docker=podman" >> ~/.bashrc |
现在,你可以继续使用 docker 命令,但实际上调用的是 podman。
6.2 用户镜像隔离
Root 用户和普通用户拥有独立的镜像和容器存储空间,互不可见。
1 | # root 用户查看 |
6.3 查看容器进程树
利用 Podman 简洁的进程模型进行调试:
1 | # 查看容器相关进程 |
七、总结
Podman 作为 Docker 的现代替代品,凭借其无需守护进程、原生支持 Rootless 模式和与 Docker CLI 高度兼容的特性,为容器运行提供了更安全、更灵活的解决方案。
迁移建议:
- 对于新项目或新环境,优先考虑 Podman。
- 对于现有 Docker 用户,可以通过设置别名
alias docker=podman平滑过渡。 - 充分利用 Rootless 模式 提升安全性,特别是在多用户环境或 CI/CD 流水线中。
通过掌握 Podman 的核心概念、命令和配置,你可以在享受容器技术便利的同时,构建更安全、更高效的容器化工作流。
Git设置代理
一、问题诊断与协议识别
当克隆(git clone)或拉取/推送(git pull/git push)远程仓库时,如果遇到速度极慢、频繁超时甚至失败的情况,很可能是网络连接问题。此时,为 Git 配置代理是有效的解决方案。
首先,识别你使用的 Git 远程协议:
- HTTP/HTTPS 协议:远程地址以
http://或https://开头。1
https://github.com/user/repo.git
- SSH 协议:远程地址以
git@或ssh://开头。1
git@github.com:user/repo.git
代理类型:你需要知道本地代理软件提供的协议和端口,通常是 HTTP/HTTPS 代理 或 SOCKS5 代理。
二、为 HTTP/HTTPS 协议配置代理
此方法通过 Git 自身的配置项设置代理,适用于使用 http:// 或 https:// 地址的仓库。
2.1 为所有仓库设置全局代理
1 | # 设置 HTTP/HTTPS 代理(端口 7890 为例) |
参数说明:
--global:修改全局配置文件(~/.gitconfig),对所有仓库生效。http://127.0.0.1:7890:代理地址和端口,请替换为你本地代理软件的实际设置。- 重要提示:Git 中
http.proxy配置项同时作用于http://和https://协议,没有独立的https.proxy配置项。
2.2 为特定域名设置代理
如果只想为某个网站(如 GitHub)使用代理,可以针对性地配置。
1 | # 为 GitHub 设置 HTTP/HTTPS 代理 |
优势:此配置仅影响对 github.com 的访问,其他仓库仍走直连,更灵活。
2.3 查看与取消代理配置
1 | # 查看所有 Git 配置 |
三、为 SSH 协议配置代理
当使用 git@ 格式的地址时,Git 依赖 SSH 进行通信。此时需要配置 SSH 客户端本身,通过修改 ~/.ssh/config 文件实现。
3.1 Linux 和 macOS 用户配置
编辑 ~/.ssh/config 文件(如果不存在则创建):
1 | nano ~/.ssh/config |
针对 HTTP/HTTPS 代理:
1 | Host github.com |
针对 SOCKS5 代理:
1 | # 方式一:明确指定协议 |
参数详解:
Host github.com:指定此配置仅对访问github.com生效。可替换为gitlab.com等。User git:SSH 连接用户,对于 Git 服务通常为git。ProxyCommand:指定通过代理建立连接的命令。nc:netcat命令,用于网络连接。-X connect:指定使用 HTTP CONNECT 方法(用于 HTTPS 代理)。-X 5:指定使用 SOCKS5 协议。-x 127.0.0.1:port:指定代理服务器地址和端口。%h %p:SSH 运行时自动替换为目标主机名和端口。
3.2 Windows 用户配置
Windows 系统通常使用 connect 工具(Git for Windows 自带)。编辑 ~/.ssh/config 文件(路径通常为 C:\Users\你的用户名\.ssh\config)。
针对 HTTP/HTTPS 代理:
1 | Host github.com |
针对 SOCKS5 代理:
1 | Host github.com |
参数说明:
connect:Git for Windows 自带的代理连接工具。-H:指定 HTTP 代理。-S:指定 SOCKS5 代理。
3.3 测试 SSH 连接
配置完成后,测试 SSH 是否能通过代理正常连接:
1 | ssh -T git@github.com |
如果看到类似 Hi username! You've successfully authenticated... 的成功提示,则配置正确。
四、综合配置示例与最佳实践
4.1 混合环境配置示例
假设你的环境是:
- 对
GitHub使用 SSH 协议 + SOCKS5 代理(端口 7891)。 - 对
公司内网 GitLab使用 HTTPS 协议直连。 - 其他所有 HTTPS 仓库使用 HTTP 代理(端口 7890)。
对应配置:
**SSH 配置 (
~/.ssh/config)**:1
2
3
4
5
6Host github.com
User git
ProxyCommand nc -x 127.0.0.1:7891 %h %p
Host internal.gitlab.com
User git
# 无 ProxyCommand,表示直连Git 全局配置:
1
2
3
4# 为所有 HTTPS 仓库设置代理
git config --global http.proxy http://127.0.0.1:7890
# 排除公司内网 GitLab,让其直连
git config --global http.http://internal.gitlab.com.proxy ""
4.2 快速切换脚本(高级用法)
可以创建 Shell 脚本或别名来快速启用/禁用代理。
1 | # 在 ~/.bashrc 或 ~/.zshrc 中添加别名 |
然后执行 source ~/.bashrc 后,即可通过 git-proxy-on 和 git-proxy-off 快速切换。
五、常见问题与故障排除
错误:
Failed to connect to 127.0.0.1 port 7890: Connection refused
原因:代理服务器未运行,或端口号错误。
解决:确认本地代理软件(如 Clash、V2Ray)已启动,并检查其监听的端口号。配置后速度反而变慢或失败
原因:代理服务器不稳定或网络延迟高。
解决:尝试更换代理节点,或对特定仓库使用直连(git config --unset)。如何为
git://协议设置代理?git://协议使用 9418 端口,不常用且通常不支持代理。建议改用 HTTPS 或 SSH 协议。公司内网环境注意事项
如果公司网络已提供透明代理或强制使用自己的代理,可能需要联系 IT 部门获取正确的代理地址,并可能需要配置no_proxy环境变量来排除内部地址。
六、总结
| 场景 | 协议 | 配置位置 | 关键命令/配置 |
|---|---|---|---|
| 通用 HTTPS 仓库 | HTTP/HTTPS | Git 全局配置 | git config --global http.proxy http://127.0.0.1:7890 |
| 特定 HTTPS 仓库 | HTTP/HTTPS | Git 全局配置 | git config --global http.https://github.com.proxy ... |
| SSH 仓库 | SSH | ~/.ssh/config 文件 |
ProxyCommand nc -x 127.0.0.1:7891 %h %p |
核心步骤:
- 确定协议:查看远程仓库地址是
https://还是git@。 - 确定代理:弄清本地代理的协议(HTTP/HTTPS 或 SOCKS5)和端口。
- 对症下药:
- HTTPS 协议:使用
git config命令。 - SSH 协议:编辑
~/.ssh/config文件。
- HTTPS 协议:使用
- 测试验证:通过
git clone一个小仓库或ssh -T测试连接。