使用Git制作和提交patch
背景概況
現(xiàn)在很多大型的開源項(xiàng)目,如:Linux, U-Boot蜗顽,都是通過patch來提交代碼的。
普通開發(fā)者從軟件倉庫git clone下代碼雨让,修改代碼雇盖、制作patch,最后用E-mail發(fā)送給對應(yīng)代碼維護(hù)者就好了栖忠。
Git最初作為Linux的版本控制工具崔挖,提供了透明、完整庵寞、穩(wěn)定的patch功能狸相。
Git提供了兩種簡單的patch方案。一是使用git diff生成的標(biāo)準(zhǔn)patch捐川,二是使用git format-patch生成的Git專用patch脓鹃。
git diff生成的標(biāo)準(zhǔn)patch
為了修改代碼,我們一般的做法是建立一個新分支:test
$ git branch
* master
$ git branch test
$ git checkout test
Switched to branch 'test'
$ git branch
master
* test
接下來就可以開始修改代碼古沥,修改完成之后将谊,制作補(bǔ)丁:
$ git commit -a -m "commit message"
[test xxxx] commit message
n file changed, n insertion(+), n deletion(-)
$ git diff master > patch
$ git checkout master
Switched to branch 'master'
在當(dāng)前目錄下產(chǎn)生補(bǔ)丁文件:patch渐白,我們可以用git apply來應(yīng)用補(bǔ)丁尊浓。
git format-patch生成的Git專用patch
前面部分和上面一樣,新建分支并修改代碼纯衍。
制作patch:
$ git commit -a -m "commit message" -s
[test xxxx] commit message
n file changed, n insertion(+), n deletion(-)
$ git format-patch -M
git commit 增加-s參數(shù)是指在commit中添加Signed-off-by信息栋齿。
這里的-M是指生成最近M次commit的patch。
我們可以用git am來應(yīng)用補(bǔ)丁襟诸。
生成的patch不僅有diff的信息瓦堵,還有提交者、時間等等歌亲,還是一個E-mail文件菇用。
提交者信息可以這樣配置:
$ git config --global user.name "Your name"
$ git config --global user.email "Your email"
git send-email發(fā)送patch
配置E-mail信息:
$ vim ~/.gitconfig
以gmail為例:
[sendemail]
smtpencryption = tls
smtpserver = smtp.gmail.com
smtpuser = yourname
smtppass = yourpassword
smtpserverport = 587
from = yourname@gmail.com
然后就可以發(fā)送補(bǔ)丁了:
$ git send-email --to <maintainer's email> --cc <mailing list> <your patch>
- 我的個人主頁:http://www.techping.cn/
- 我的個人站點(diǎn)博客:http://www.techping.cn/blog/wordpress/
- 我的CSDN博客:http://blog.csdn.net/techping
- 我的簡書:http://www.reibang.com/users/b2a36e431d5e/timeline
- 我的GitHub:https://github.com/techping
歡迎相互follow~