如何将git-buildpackage集成到git-flow工作流以生成Debian发布包?
我之前也在项目里折腾过把git-flow和git-buildpackage(gbp)结合起来,一开始头疼两者标签、分支模型的重叠冲突,后来摸索出一套适配的流程,分享给你参考:
第一步:先把分支模型对齐,避免混乱
git-flow和gbp的分支定位本来就有差异,先把两者的分支对应关系理清楚:
- git-flow的master分支:对应gbp的
debian分支(master是稳定生产分支,debian分支正好存打包好的稳定版配置和代码) - git-flow的develop分支:对应gbp的
upstream分支(develop是开发分支,upstream分支存纯净的上游源码,完美匹配)
初始化的时候可以这么操作:
- 先跑
git flow init设置好master和develop分支,按默认选项来就行 - 再跑
gbp init创建upstream和debian分支 - 把develop分支的初始代码合并到upstream分支,把master分支的初始内容合并到debian分支(确保两者内容同步)
第二步:日常开发用git-flow就行,别碰打包配置
日常开发完全按git-flow的逻辑来:
- 从develop(也就是gbp的upstream分支)拉feature分支做功能开发:
git flow feature start <功能名> - 开发完合并回develop:
git flow feature finish <功能名> - 这阶段完全不用碰debian文件夹里的打包配置,保持upstream分支的纯净度
第三步:发布版本时,把git-flow release和gbp打包结合起来
当要发布正式版本vX.Y.Z时,按这个流程走:
启动git-flow的release分支:
git flow release start vX.Y.Z这个分支基于develop创建,用来做发布前的最后调整(比如修复小bug、更新版本注释)
给上游源码打gbp需要的标签:
在release分支里确认代码没问题后,给上游源码打标签(gbp要求标签格式最好是upstream/X.Y.Z,和git-flow的vX.Y.Z标签不冲突):git tag -s upstream/X.Y.Z -m "Upstream release vX.Y.Z"加
-s是用GPG签名标签,正式发布推荐这么做,测试的话可以去掉切换到debian分支处理打包配置:
git checkout debian git merge upstream/X.Y.Z # 把上游稳定版代码合并到debian分支然后更新debian的changelog文件,用
dch命令很方便:dch -v X.Y.Z-1这里的
-1是debian的修订号,第一次打包用1,后续如果只改打包配置不改源码就用2、3依次递增,打开changelog后填写更新内容保存就行用gbp构建Debian包:
在debian分支下直接跑构建命令:gbp buildpackage -us -uc-us -uc表示不签名源码包和二进制包,测试环境用这个很方便;正式发布的话去掉这两个参数,会自动用你的GPG签名完成git-flow的release流程:
最后把release分支合并回master和develop,同时推送标签:git flow release finish vX.Y.Zgit-flow会自动给master打一个vX.Y.Z的标签,和我们之前打的upstream/X.Y.Z标签不冲突,一个是项目版本标签,一个是gbp需要的上游源码标签,各司其职
第四步:热修复场景的适配
如果稳定版出bug需要紧急修复:
- 启动git-flow的hotfix分支:
git flow hotfix start vX.Y.Z+1(基于master分支创建) - 在hotfix分支里修复bug,然后更新debian/changelog:
dch -v X.Y.Z+1-1 - 给上游打热修复标签:
git tag -s upstream/X.Y.Z+1 -m "Upstream hotfix vX.Y.Z+1" - 切换到debian分支合并hotfix分支,然后跑
gbp buildpackage构建修复后的包 - 最后完成hotfix:
git flow hotfix finish vX.Y.Z+1,合并回master和develop
几个关键注意点
- 别在debian分支里改源码!所有源码修改都要在develop(upstream)分支完成,再合并到debian分支,保持debian分支只存打包配置
- 标签格式区分开:git-flow用
vX.Y.Z,gbp上游标签用upstream/X.Y.Z,完全不会冲突 - 正式发布前可以用
gbp verify-tag upstream/X.Y.Z验证标签是否正确,或者用lintian检查生成的Debian包是否符合规范
内容的提问来源于stack exchange,提问作者vera

