前两篇博文大致介绍了向rtems提交patch的方法和途径,接下来详细介绍如何创造patch并通过git提交至rtems devel:
在这里全部采用git进行diff比对和提交,不建议采用linux自带的diff命令,因为本人一开始采用linux的diff命令提交后,被rtems公司的大牛说了一通。。。。,因为linux自带的diff命令没有版本信息和作者信息,给管理带来很大不便,只适用于自身开发需要,并不适合团队开发或者多人贡献。
首先git clone远程库到本地:
git clone git://git.rtems.org/rtems.git rtems
git checkout -b rtems-sichen master
创建完成后可以利用git branch命令查看本地分支情况,带*表示当前分支。
然后在分支进行代码的修改和添加。
修改完成后,利用git add命令将变化进行添加
然后利用 git commit进行提交改变,参数-m添加注释。
要注意的是,如果没有使用git add命令就直接git commit ,会导致报错:这些改变未被添加。
git add /some/changed/files
git commit
因此这两个命令一般在一起用。
git commit只是本地提交,还没有上传到远程仓库,git push是将commit上传到远程仓库。
最后进行patch制作:
git format-patch master
将当前branch和本地master进行对比,然后创造patch,该命令是将patch输出到命令行,如果要制作patch文件,就要重定向输出了。
git format-patch master --stdout > diff.patch
将patch输出到diff.patch文件
git format-patch origin/master --stdout > diff.patch
这是将patch与远程仓库的master分支进行patch。
制作好patch后就是通过git发送给rtems了
这里用到的命令是:
git send-email /path/to/patch --to devel@rtems.org
当然要用git send mail首先要进行一系列的配置:
首先配置git 邮箱服务器,在这里本来可以选用gmail进行配置的,但考虑到国内原因,用qq邮箱进行演示:
配置smtp服务,qq邮箱的smtp地址为smtp.qq.com
git config --global sendemail.smtpserver smtp.qq.com
git config --global sendemail.smtpserverport 587
git config --global sendemail.smtpencryption tls
git config --global sendemail.smtpuser your_email@qq.com
登陆qq邮箱,在账户栏找到如下:
默认右边是关闭的,只要点击开启,会让你扫描一个二维码验证身份,然后可以开启。
理论上开启前两个即可,为了保险起见,四个全部开启。
然后要注意了:截图中黄字非常重要:登陆第三方客户端时,密码框请输入授权码进行验证!
这里会在发送patch时用到
当配置好之后,开始进行patch发送:
命令:
git send-email /path/to/patch --to devel@rtems.org
输入后,会提示,是否要进行发送
输入y然后会提示让你输入邮箱密码:
注意这里的密码不是你的qq邮箱密码,就是之前黄字中说的密码,要生成授权码的。
输入授权码后回车,如果没有报错,恭喜你发送成功了。rtems mail list 的全体成员都能看到你的补丁。