【实习经历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操作经验,对于更深入的知识点,建议查阅其他专业文章进行学习)