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

【实习经历Two:参与开源项目,学习并应用Git】

前端参与开源项目中使用过的git

1.参与开源项目(必备技能——git)

参与开源项目首先需要进入自己想参加的项目页面 点击右边的Fork即可复制到自己的仓库

像个人开发时常用的add、commit和push等命令就不过多介绍了,在这里主要是想记录一下自己作为从未参与过开源项目的初学者遇到的一些常用知识点,很感谢本人这次实习的mt老师很有耐心地帮助我解决使用Git过程中遇到的一些问题。

a.如何在commit里加上SOB署名

首先贡献开源项目需要署名,所以需要先配置用户名和邮箱:

git config --global user.name "xxx"
git config --global user.email "<EMAIL>"

如果配置错误,可以使用 --amend --author 修复:

git commit --amend --author="Correct Name <correct.email@example.com>"

使用GBP密钥对提交进行签名:

gpg --full-generate-key #生成主密钥

回车后出现以下内容:

gpg (GnuPG) 2.2.4; Copyright (C) 2017 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.Please select what kind of key you want:(1) RSA and RSA (default)(2) DSA and Elgamal(3) DSA (sign only)(4) RSA (sign only)
Your selection?1 #默认选1,表示加密和签名都使用RSA算法
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (3072) #默认选3072,表示密钥长度为3072位,回车即可
Please specify how long the key should be valid.0 = key does not expire<n>  = key expires in n days<n>w = key expires in n weeks<n>m = key expires in n months<n>y = key expires in n years
Key is valid for? (0) #默认选0,表示密钥永不过期
Is this correct? (y/N) y
GnuPG needs to construct a user ID to identify your key.Real name:#姓名的英文写法
Email address: #邮箱地址
Comment: #comment可以空着
#生成的用户id
You selected this USER-ID:"psadmin <psadmin@psadmin.com>"Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? #默认选O,表示确认

接着,系统会弹出一个小框让你设置一个私钥的密码,密码需要输入两次。

最好再生成一张"撤销证书",以备以后密钥作废时,可以请求外部的公钥服务器撤销你的公钥。

如: gpg --gen-revoke 5550D5D614E9CC36F1B731B930B117F460FCAF5F

如果有较高的安全需求(例如在多个设备上使用 GPG 签名功能),建议为签名操作生成一个专门的子密钥。如果只是偶尔使用签名功能,且密钥只用于单一设备,主密钥已经足够

命令显示内容包含的密钥类型用途
gpg -k公钥环中的密钥主公钥 (pub) 和子公钥 (sub)查看本地存储的所有公钥,用于加密或验证签名
gpg -K私钥环中的密钥主私钥 (sec) 和子私钥 (ssb)查看本地存储的所有私钥,用于签名或解密

运行命令 gpg -k 列出刚刚创建的 GPG 密钥的 ID
比如这里的id是5550D5D614E9CC36F1B731B930B117F460FCAF5F

运行下面的命令配置 Git 以使用指定的密钥签名提交,将 <KEY ID> 替换PG 密钥 ID

git config --global user.signingkey <KEY ID>

添加 GPG_TTY 添加到本地系统用户的 Bash 环境变量

[ -f ~/.bashrc ] && echo 'export GPG_TTY=$(tty)' >> ~/.bashrc

手动签名单个 Git 提交,签名时会弹出提示框,询问 GPG 密钥的密码

git commit -S -m "first commit"

一般我们需要写清楚具体commit的内容 推荐使用git commit -s -S,会打开一个文件让我们自行编辑commit提交的内容(标题,内容和Sob)

保存关闭后再git log查看一下就能看到新增的一条提交记录

最后Push到远程分支就ok.
当然如果先提交了,可以使用git commit --amend修改最近一次的提交信息,再push
保留更改并撤回提交:

git reset --soft HEAD~1 #不保留改动用--hard(不推荐)

创建具有签名、验证的子密钥或想了解更多内容可参考https://blog.csdn.net/vic_qxz/article/details/127225478?fromshare=blogdetail&sharetype=blogdetail&sharerId=127225478&sharerefer=PC&sharesource=m0_75134766&sharefrom=from_link

b.其他常用的commit命令
git rebase

1个pr只需要对应1个commit,当我们需要合并多个commit时就要用到rebase里的squash

合并多个commit可参考文章:https://blog.csdn.net/weixin_42392767/article/details/139543446?fromshare=blogdetail&sharetype=blogdetail&sharerId=139543446&sharerefer=PC&sharesource=m0_75134766&sharefrom=from_link

rebase过程中可能会出现冲突 解决完后需要重新add再执行git rebase --continue
终止rebase:git rebase --abort

如果想要修改某个历史commit,也可以使用rebase的interactive模式:

git rebase -i HEAD~n  # n是要回溯的提交数
git cherry-pick

cherry-pick是将某个分支上的某个commit应用到当前分支上

这个主要是我之前犯了一个错误:忘记拉取主仓最新的代码,在旧的分支上进行了开发,导致最后使用git log --graph --oneline时发现节点树已经混乱,所以一定一定,要基于最新的代码开发!!!

解决方式:拉取主仓最新的代码后从主分支再checkout -b 一个新分支出去,然后把在错误分支上开发的代码通过cherry-pick到新分支上再强制把新分支上的代码覆盖推送给错误的分支上。

自动关闭issue

在commit提交记录里添加Resolves #pr号
在pr内容里添加Resolves #issue号

c.其他
pr之间的关联性

有时候一个需求大概率会分批提交多个pr,但是如果前一个pr还没审核通过的情况下怎么办呢?

我的解决方法是不同的pr在不同的分支上进行开发,如完成了a分支上的代码开发后(解决了部分需求),在a的pr还未通过的情况下,从a分支上checkout -b出去一个新的分支b,再在b分支上进行开发,这样b分支就自动和a分支关联上了,logs后也会看到标记。但是force push后标记会丢失,笨方法是每次改了a就checkout -b再做b,聪明点的方法是在b分支上执行rebase操作,将a分支的最新更改应用到b分支上。

(ps:以上仅记录了我在前端实习期间遇到的一些基本的Git操作经验,对于更深入的知识点,建议查阅其他专业文章进行学习)

相关文章:

【实习经历Two:参与开源项目,学习并应用Git】

前端参与开源项目中使用过的git 1.参与开源项目&#xff08;必备技能——git) 参与开源项目首先需要进入自己想参加的项目页面 点击右边的Fork即可复制到自己的仓库 像个人开发时常用的add、commit和push等命令就不过多介绍了&#xff0c;在这里主要是想记录一下自己作为从未…...

AD绘图基本操作

一、基本操作 注意&#xff1a;快捷键都要在英文模式下才能生效 1、移动 按住鼠标右键移动 2、切换桌面栅格距离 G 3、英寸和毫米 尺寸切换 Q 4、元件在3D模式下的移动 3D视角鼠标左键只起到选择元器件并移动之的功能&#xff0c; 单纯鼠标右键只能平移桌面 shift鼠…...

6k ± 1 规则

6k 1 规则 是基于对质数分布规律的观察和数学证明得出的。它指出&#xff0c;除了 2 和 3 之外&#xff0c;所有质数都可以表示为 6k 1 的形式&#xff0c;其中 k 是正整数。以下是详细的证明过程&#xff1a; 1. 质数的基本性质 质数是指大于 1 的自然数&#xff0c;且只能…...

AcWing 5960:输出前k大的数 ← 小根堆

【题目来源】 https://www.acwing.com/problem/content/5963/ 【题目描述】 给定一个长度为 n 的数组 a1,a2,…,an&#xff0c;统计前 k 大的数并且把这 k 个数从大到小输出。 【输入格式】 第一行包含整数 n。 第二行包含 n 个整数 a1,a2,…,an。 第三行包含整数 k。​​​​…...

V2X验证

1. 标准和规范验证 欧洲对 DSRC 和 V2X 系统有一系列的标准和规范,主要由 ETSI (European Telecommunications Standards Institute) 和 IEEE 等组织制定。验证通常包括以下标准和规范: ETSI EN 302 571:这是DSRC在欧洲的主要标准,规定了DSRC系统的技术要求和操作条件。ET…...

创建表空间和表

创建表 1.业务背景 在城市的住宅小区和商业区域中&#xff0c;需要对业主的用水情况及费用缴纳进行有效管理。业主类型涵盖普通居民、商业用户等不同类别&#xff08;业主类型表&#xff09;&#xff0c;每种类型对应不同的水价标准&#xff08;价格表&#xff09;。区域表记…...

dfs(十二)21. 合并两个有序链表 递归解决

21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&#xff1a;l1 [1,2,4], l2 [1,3,4] 输出&#xff1a;[1,1,2,3,4,4]示例 2&#xff1a; 输入&#xff1a;l1 [], l2 [] …...

51单片机指令系统入门

目录 基本概念讲解 一、机器指令​ 二、汇编指令​ &#xff08;一&#xff09;汇编指令的一般格式 &#xff08;二&#xff09;按字节数分类的指令 三、高级指令 总结​ 基本概念讲解 指令是计算机&#xff08;或单片机&#xff09;中 CPU 能够识别并执行的基本操作命令…...

安全无事故连续天数计算,python 时间工具的高效利用

安全天数计算&#xff0c;数据系统时间直取&#xff0c;安全标准高效便捷好用。 笔记模板由python脚本于2025-03-17 23:50:52创建&#xff0c;本篇笔记适合对python时间工具有研究欲的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值&#xff1a;在于输出思考与经验&am…...

如何玩DeepSeek!15分钟快速创建GIS动态数据可视化仪表盘

DeepSeek最近火遍全球&#xff0c;大家用的都用的不亦乐乎。国外呢&#xff1f;当然也是&#xff0c;最近一上YouTube、X等都是deepseek的推送。 今天介绍一下&#xff0c;我在YouTube上看到的GIS行业与DeepSeek结合的一个案例&#xff1a; 快速轻松构建交互式地图仪表盘&…...

课上测试:MIRACL共享库使用测试

MIRACL(MultiprecisionIntegerandRationalArithmeticC/cLibrary)是著名的密码算法库&#xff0c;设法去官网下载安装MIRACL&#xff0c;提交安装过程截图或过程文本&#xff08;3分&#xff09;. 去github官网下载.zip文件 使用如下命令进行解压 unzip -j -aa -L MIRACL-mast…...

网络编程知识预备阶段

1. OSI七层模型 OSI&#xff08;Open System Interconnect&#xff09;七层模型是一种将计算机网络通信协议划分为七个不同层次的标准化框架。每一层都负责不同的功能&#xff0c;从物理连接到应用程序的处理。这种模型有助于不同的系统之间进行通信时&#xff0c;更好地理解和…...

Echo服务详解与实现

各类资料学习下载合集 ​​https://pan.quark.cn/s/8c91ccb5a474​​ 在网络编程中,Echo服务是一个非常基础且重要的服务,它的功能是接收客户端发送的数据,并将相同的数据返回给客户端。本文将详细介绍如何使用Python实现一个简单的Echo服务,并提供完整的代码实例及运行结…...

STM32微控制器_03_GPIO原理与应用

核心内容 STM32 GPIO基本原理&#xff08;熟悉&#xff09;GPIO输出功能HAL库编程实现的应用&#xff08;重点&#xff09;GPIO输入功能HAL库编程实现的应用&#xff08;重点&#xff09; 一.STM32 GPIO基本原理 1.GPIO简介 STM32的GPIO相当于STM32的四肢&#xff0c;一个S…...

零拷贝分析

kafka 零拷贝 请求 - 网口 - socket - 用户态 - 内核缓存区 - 内核态&#xff08;磁盘信息&#xff09; 磁盘 - 内核缓存区 - 用户缓存区 - 网络缓存区 零拷贝&#xff08;Zero-Copy&#xff09; 是一种高效的数据传输技术&#xff0c;旨在减少数据在内存中的拷贝次数&#x…...

爬虫逆向:详细讲述Android底层原理及机制

更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Android系统架构1.1 Linux内核层1.2 硬件抽象层(HAL)1.3 系统运行库层1.4 应用框架层1.5 应用层二、Android启动过程三、进程与线程管理四、内存管理机制五、Binder机制六、安全机制七、电源管理机制八、Android …...

电容器基础观念

Take-away: 电容器容值&#xff0c;和「导体的几何形状」&#xff0c;「周围的介电材料」相关。电力线起于正电荷&#xff0c;终止于负电荷。金属互相越靠近&#xff0c;电容越大。Maxwell电容矩阵有负号&#xff0c;SPICE电容矩阵没有负号。Maxwell电容矩阵、SPICE电容矩阵可…...

Python 视频爬取教程

文章目录 前言基本原理环境准备Python安装选择Python开发环境安装必要库 示例 1&#xff1a;爬取简单直链视频示例 2&#xff1a;爬取基于 HTML5 的视频&#xff08;以某简单视频网站为例&#xff09; 前言 以下是一个较为完整的 Python 视频爬取教程&#xff0c;包含基本原理…...

NumPy系列 - 创建矩阵

目录 前传直接创建数组就只是创建数组1. np.array()2. np.arange()3. np.ones()4. numpy.ones_like()5. np.zeros()6. numpy.zeros_like() 定义数据类型 参考资料 前传 由于&#xff0c;某人在上智能相关课程的时候&#xff0c;总想着一大堆的事情&#xff0c;统计股市涨跌&am…...

从Instagram到画廊:社交平台如何改变艺术家的展示方式

从Instagram到画廊&#xff1a;社交平台如何改变艺术家的展示方式 在数字时代&#xff0c;艺术家的展示方式正在经历一场革命。社交平台&#xff0c;尤其是Instagram&#xff0c;已经成为艺术家展示作品、与观众互动和建立品牌的重要渠道。本文将探讨社交平台如何改变艺术家的…...

谈谈 TypeScript 中的联合类型(union types)和交叉类型(intersection types),它们的应用场景是什么?

一、联合类型&#xff08;Union Types&#xff09; 核心概念 使用管道符 | 表示多选一关系&#xff0c;典型场景&#xff1a;处理可能存在多种类型的变量 // 基础示例&#xff1a;处理数值型ID&#xff08;number&#xff09;或哈希型ID&#xff08;string&#xff09; type…...

华为OD机试 - 最长的完全交替连续方波信号(Java 2023 B卷 200分)

题目描述 给定一串方波信号,要求找出其中最长的完全连续交替方波信号并输出。如果有多个相同长度的交替方波信号,输出任意一个即可。方波信号的高位用1标识,低位用0标识。 说明: 一个完整的信号一定以0开始并以0结尾,即010是一个完整的信号,但101,1010,0101不是。输入的…...

✎ 一次有趣的经历

&#x1f4c6;2025年3月17日 | 周一 | ☀️晴 &#x1f4cd;今天路过学院楼7&#xff0c;见到了满园盛开的花&#x1f33a;&#xff0c;心情瞬间明朗&#xff01; &#x1f4cc;希望接下来的日子也能像这些花一样&#xff0c;充满活力&#x1f525;&#xff01; &#x1…...

【Spring】第二弹:通过反射机制初步理解 IoC

一、Java 反射机制 Java反射机制是在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff1b;对于任意一个对象&#xff0c;都能够调用它的任意方法和属性&#xff1b;这种动态获取信息以及动态调用对象方法的功能称为Java语言的反射机…...

快!快!快!NDPP时延测试数据公布!

在全方位认识NDPP第3期《NDPP在金融场景的应用》中&#xff0c;我们重点介绍了NDPP的典型应用场景行情解码硬件加速和策略计算加速&#xff0c;并帮助某百亿私募用户基于NDPP实现期货业务加速的案例。 近期&#xff0c;中科驭数凭借低时延产品荣获信创“大比武”行业融合赛道三…...

激光雷达“开卷”2.0,头部Tier1入局

高阶智驾的普及&#xff0c;正在催生激光雷达市场的巨大潜在增长空间。 本周&#xff0c;汽车激光雷达主力供应商之一的禾赛科技发布财报&#xff0c;去年第四季度激光雷达总交付量为222,054台&#xff0c;同比增长153.1%&#xff0c;超过2023年全年。2024全年激光雷达总交付量…...

STM32 - 在机器人领域,LL库相比HAL优势明显

在机器人控制器、电机控制器等领域的开发&#xff0c;需要高实时性、精细化控制或者对代码执行效率、占用空间有较高要求。所以&#xff0c;大家常用的HAL库明显不符合要求。再加上&#xff0c;我们学习一门技术&#xff0c;一定要学会掌握底层的原理。MCU开发的底层就是寄存器…...

力扣No.376.摆动序列

题目&#xff1a; 链接&#xff1a; https://leetcode.cn/problems/wiggle-subsequence/description/ 代码&#xff1a; class Solution {public int wiggleMaxLength(int[] nums) {int nnums.length;//状态表示:int[] fnew int[n];int[] gnew int[n];//初始化:for(int i0;i…...

找工作、创业的思考和出路

最近有几位朋友在找工作&#xff0c;以及探索职场出路&#xff0c;与他们聊了一些关于找工作和职业发展的话题。而这些话题对大多数职场人来说&#xff0c;都是必须考虑和面对的问题。今天就基于这两个话题展开聊聊。 首先&#xff0c;初入职场时&#xff0c;工作是相对容易找…...

IP关联是什么?怎么避免?

在跨境电商的道路上&#xff0c;大家好&#xff01;今天想和大家聊一聊一个非常重要的话题&#xff0c;那就是IP关联的问题。在商业活动中&#xff0c;了解如何避免IP关联对保护我们宝贵的商铺至关重要。接下来&#xff0c;我们将深入探讨IP关联的概念、影响及如何有效防止这一…...