forked from openkylin/docs
!279 git工作流文档更新openkylin 2.0版本自动打包说明
Merge pull request !279 from 公子文彬/develop-openkylin-2.0
This commit is contained in:
commit
560f3cef96
|
@ -106,7 +106,7 @@ LOGIN改为自己的okbs帐号对应ID
|
|||
|
||||
> [okbs]
|
||||
|
||||
> fqdn=build.openkylin.top:2121
|
||||
> fqdn=upload.build.openkylin.top:2121
|
||||
|
||||
> method=sftp
|
||||
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 79 KiB After Width: | Height: | Size: 36 KiB |
|
@ -7,9 +7,9 @@
|
|||
| 分支 | 说明 | 举例 |
|
||||
| --------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
|
||||
| 上游分支 | 不包含debian目录的分支,保存软件包的上游源码。 修改包只需要一个上游分支,统一命名为upstream。 对于自研包,可能会多版本并行开发,所以可能会有多个上游分支,为了避免与打包分支混淆,上游分支名称里不能使用“/” | upstream master 1.0 2.0 |
|
||||
| native打包分支 | 用于包维护者提交修改的分支,包含debian目录。 相对于上游分支修改的内容可以直接提交到这个分支。 | 名称格式为:发行版代号/系列代号 银河麒麟V10 SP1的开发分支命名为:yhkylin/v101openKylin 长江版本开发分支命名为:openkylin/yangtze |
|
||||
| quilt打包分支 | 修改包要求使用quilt分支进行打包,这个分支下,包维护者相对上游分支做的修改都以patch形式保存在debian/patches目录中,便于更新上游版本时进行取舍。 自研包可以直接用native分支打包,也可以用quilt。 CI平台自动完成native分支到quilt分支的同步。 | openkylin/yangtze对应的quilt打包分支,在分支名前面加上packaging/: packaging/openkylin/yangtze |
|
||||
| patch-queue分支 | CI构建环境中使用的临时分支,不会提交到源码管理平台,辅助将native打包分支的修改内容生成patch保存到quilt打包分支。 | patch-queue/packaging/openkylin/yangtze |
|
||||
| 开发分支 | 用于包维护者提交修改的分支,包含debian目录。 相对于上游分支修改的内容可以直接提交到这个分支。开发分支中源码包格式为native | 名称格式为:发行版代号/系列代号 openKylin 1.0版本开发分支命名为:openkylin/yangtze |
|
||||
| 打包分支 | 修改包要求使用quilt格式进行打包,这个分支下,包维护者相对上游分支做的修改都以patch形式保存在debian/patches目录中,便于更新上游版本时进行取舍。仅能用于当前发行版的包可以使用native格式打包,此时不需创建打包分支。 CI平台自动完成开发分支到打包分支的同步。 | openkylin/yangtze对应的打包分支,在分支名前面加上packaging/: packaging/openkylin/yangtze |
|
||||
| patch-queue分支 | CI构建环境中使用的临时分支,不会提交到源码管理平台,辅助将开发分支的修改内容生成patch保存到打包分支。 | patch-queue/packaging/openkylin/yangtze |
|
||||
|
||||
|
||||
|
||||
|
@ -17,7 +17,7 @@
|
|||
|
||||
源码包导入会自动创建上游分支和打包分支,对于quilt格式的源码包,需要将打包分支转化成native格式,便于开发者利用git管理文件修改历史。
|
||||
|
||||
![img](https://gitee.com/openkylin/docs/raw/master/%E5%BC%80%E5%A7%8B%E8%B4%A1%E7%8C%AE/assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E6%BA%90%E7%A0%81%E5%8C%85%E5%AF%BC%E5%85%A5%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
|
||||
![img](assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E6%BA%90%E7%A0%81%E5%8C%85%E5%AF%BC%E5%85%A5%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
|
||||
|
||||
git_init.sh脚本描述了具体操作步骤:
|
||||
|
||||
|
@ -160,7 +160,7 @@ zcat perl_5.30.0.orig-regen-configure.tar.gz | xz -c - > perl_5.30.0.orig-regen
|
|||
gbp pristine-tar commit --component=regen-configure path-to/perl_5.30.0.orig-regen-configure.tar.xz
|
||||
```
|
||||
|
||||
## 2.3 创建native打包分支,集成patch(将包分支转换为native分支,便于开发人员本地测试编译)
|
||||
## 2.3 创建开发分支,集成patch(将源码转换为native格式,便于开发人员本地测试编译)
|
||||
|
||||
```Bash
|
||||
git checkout openkylin/yangtze # 切换到打包分支
|
||||
|
@ -179,7 +179,7 @@ echo "3.0 (native)" > debian/source/format
|
|||
|
||||
|
||||
|
||||
# 3. 开发维护人员修改软件包(在native包分支如openkylin/yangtze下进行维护)
|
||||
# 3. 开发维护人员修改软件包(在开发分支如openkylin/yangtze下进行维护)
|
||||
|
||||
## 3.1. 产线代码修改
|
||||
|
||||
|
@ -277,31 +277,31 @@ git push
|
|||
|
||||
将native格式源码包转化成quilt格式的动作会通过CI平台自动完成。
|
||||
|
||||
![img](https://gitee.com/openkylin/docs/raw/master/%E5%BC%80%E5%A7%8B%E8%B4%A1%E7%8C%AE/assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/native%E6%A0%BC%E5%BC%8F%E6%BA%90%E7%A0%81%E5%8C%85%E8%BD%AC%E5%8C%96%E6%88%90quilt%E6%A0%BC%E5%BC%8F-%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
|
||||
![img](assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/native%E6%A0%BC%E5%BC%8F%E6%BA%90%E7%A0%81%E5%8C%85%E8%BD%AC%E5%8C%96%E6%88%90quilt%E6%A0%BC%E5%BC%8F-%E6%B5%81%E7%A8%8B%E5%9B%BE.png)
|
||||
|
||||
## 4.1 以quilt格式打包
|
||||
|
||||
在打包环境中clone git库,创建临时quilt打包分支进行打包
|
||||
在打包环境中clone git库,同步开发分支的代码到打包分支进行打包
|
||||
|
||||
native转换成quilt,主要差异在于要相对于upstream的代码改动形成补丁,而不是直接在源码文件上修改,我们利用gbp pq来生成补丁。
|
||||
|
||||
```Bash
|
||||
# 切换到quilt打包分支
|
||||
# 切换到打包分支
|
||||
git checkout packaging/openkylin/yangtze
|
||||
# 创建临时patch-queue,自动切换到patch-queue/packaging/openkylin/yangtze
|
||||
gbp pq import
|
||||
# 在patch-queue中提交native打包分支最新的改动
|
||||
# 在patch-queue中提交开发分支最新的改动
|
||||
git diff --binary -r openkylin/yangtze -- ':!debian' | git apply -R
|
||||
git add . -f
|
||||
# 把native打包分支最新的commit信息提交到patch-queue分支,用于导出patch
|
||||
# 把开发分支最新的commit信息提交到patch-queue分支,用于导出patch
|
||||
git log -r openkylin/yangtze -1 --pretty=format:"%s" | git commit -F -
|
||||
# 导出patch,自动切换到packaging/openkylin/yangtze
|
||||
gbp pq export
|
||||
# 同步native打包分支对于debian目录的改动,忽略patches和source/format
|
||||
# 同步开发分支对于debian目录的改动,忽略patches和source/format
|
||||
git diff --binary -r openkylin/yangtze -- debian ':!debian/patches' ':!debian/source/format' | git apply -R
|
||||
|
||||
git add debian
|
||||
# 把native打包分支最新的commit信息提交到quilt打包分支,不需要人工输入
|
||||
# 把开发分支最新的commit信息提交到打包分支,不需要人工输入
|
||||
git log -r openkylin/yangtze -1 --pretty=format:"%s" | git commit -F -
|
||||
# 打包源码,因为gbp默认要在master分支打包,所以要加 --git-ignore-branch 参数,--git-tag参数可以在打包成功后自动创建tag
|
||||
gbp buildpackage --git-ignore-branch --git-tag --git-pristine-tar --git-pristine-tar-commit -S -nc
|
||||
|
@ -331,10 +331,10 @@ upstream_tag = DebianGitRepository.version_to_tag('upstream/%(version)s', upstre
|
|||
|
||||
## 4.2 以native格式打包
|
||||
|
||||
native分支可以在当前分支直接打包源码,上传编译平台。
|
||||
native格式软件包可以在开发分支直接打包源码,上传编译平台。
|
||||
|
||||
```Bash
|
||||
# 切换到native打包分支
|
||||
# 切换到开发分支
|
||||
git checkout openkylin/yangtze
|
||||
# 打包源码,因为gbp默认要在master分支打包,所以要加 --git-ignore-branch 参数,--git-tag参数可以在打包成功后自动创建tag
|
||||
gbp buildpackage --git-ignore-branch --git-tag -S
|
||||
|
@ -365,7 +365,7 @@ git push --tags
|
|||
|
||||
| --pristine-tar | 记录原始orig tar包的数据,避免重新用gbp打包后tar包内容发生变化 |
|
||||
| ------------------ | ------------------------------------------------------------ |
|
||||
| --no-merge | 不将上游版本的代码合并到打包分支,因为我们的打包分支是native格式的,基于upstream修改了源码,一般是没办法自动合并的 |
|
||||
| --no-merge | 不将上游版本的代码合并到打包分支,因为我们的开发分支是native格式的,基于upstream修改了源码,一般是没办法自动合并的 |
|
||||
| --upstream-branch= | 指定上游分支名称,修改包使用upstream |
|
||||
|
||||
在以上的例子中,会新创建一个tag:upstream/4.0
|
||||
|
@ -400,7 +400,7 @@ git checkout packaging/openkylin/yangtze
|
|||
git merge upstream/4.13.17
|
||||
```
|
||||
|
||||
更新native分支
|
||||
更新开发分支
|
||||
|
||||
```Bash
|
||||
git checkout openkylin/yangtze
|
||||
|
@ -408,13 +408,13 @@ git checkout openkylin/yangtze
|
|||
git merge upstream/4.13.17
|
||||
```
|
||||
|
||||
在native分支修改包版本号
|
||||
在开发分支修改包版本号
|
||||
|
||||
```Bash
|
||||
# 此时,可以在native分支对基于上游upstream的代码进行调试,如:
|
||||
# 此时,可以在开发分支对基于上游upstream的代码进行调试,如:
|
||||
# 1. 修改代码,直到能编译出二进制包以及能正常安装
|
||||
vim xxx
|
||||
# 2. 在native分支下进行debuild进行编译测试
|
||||
# 2. 在开发分支下进行debuild进行编译测试
|
||||
debuild
|
||||
# 3. 提交改动
|
||||
git add xxx
|
||||
|
@ -497,7 +497,7 @@ git branch --delete --force tmp # 删除tmp分支
|
|||
|
||||
- > 该指令是将从commit-idA开始到commit-idB之间的所有commit-id提交记录都合并过来,需要注意的是,commit-idA必须比commit-idB提前提交,也就是说在被挑选的分支上,先有的commit-idA,然后才有的commit-idB
|
||||
|
||||
#### 5.3.3.4 反向同步到native打包分支
|
||||
#### 5.3.3.4 反向同步到开发分支
|
||||
|
||||
```Bash
|
||||
git checkout openkylin/yangtze
|
||||
|
@ -508,10 +508,10 @@ git commit -m 'merge upstream 4.13.17'
|
|||
|
||||
### 5.3.4 提交到git服务器
|
||||
|
||||
提交native打包分支与packaging分支即可,其他临时分支不要提交
|
||||
提交开发分支与packaging打包分支即可,其他临时分支不要提交
|
||||
|
||||
```
|
||||
!push时,要先push packaging分支,再push native分支。
|
||||
!push时,要先push packaging打包分支,再push 开发分支。
|
||||
```
|
||||
|
||||
```Bash
|
||||
|
@ -571,7 +571,7 @@ gbp import-dsc --pristine-tar --debian-branch=openkylin/yangtze --upstream-branc
|
|||
|
||||
例如ukui在某个节点时,要将当前已导入的包统一升级上游版本号,需要按如下流程操作,
|
||||
|
||||
(1)切换到打包分支 (例如openkylin/yangtze)。
|
||||
(1)切换到开发分支 (例如openkylin/yangtze)。
|
||||
|
||||
```Shell
|
||||
git checkout openkylin/yangtze
|
||||
|
@ -599,7 +599,7 @@ git push --tags
|
|||
(6)生成新版本orig.tar包(CI平台完成)。
|
||||
|
||||
```Shell
|
||||
# 将changelog改动同步到quilt打包分支
|
||||
# 将changelog改动同步到打包分支
|
||||
git diff --binary -r openkylin/yangtze debian ':!debian/patches' ':!debian/source/format' | git apply -R
|
||||
git add debian
|
||||
git log -r openkylin/yangtze -1 --pretty=format:"%s" | git commit -F -
|
||||
|
@ -616,10 +616,10 @@ git push origin pristine-tar
|
|||
|
||||
前提是upstream版本没有改变,为quilt格式,否则需要清空仓库全新导入或者走“更新upstream版本”流程。
|
||||
|
||||
(1)在quilt打包分支覆盖debian目录
|
||||
(1)在打包分支覆盖debian目录
|
||||
|
||||
```Shell
|
||||
# 切换到quilt打包分支
|
||||
# 切换到打包分支
|
||||
|
||||
# 删除现有debian目录,准备用Kylin的版本覆盖
|
||||
# 解压Kylin版本的*.debian.tar文件
|
||||
|
@ -629,20 +629,20 @@ git push origin pristine-tar
|
|||
|
||||
新增一条修改记录,版本号为<upstream version>-ok<N>,N是数字,要比覆盖前openkylin中的版本号大。
|
||||
|
||||
(3)覆盖native分支
|
||||
(3)覆盖开发分支
|
||||
|
||||
|
||||
|
||||
# 9. 从头开始构建打包分支
|
||||
# 9. 从头开始实现自动打包
|
||||
|
||||
本节介绍如何在只有upstream等不包含debian配置文件的分支时,如何创建打包分支
|
||||
本节介绍如何在只有upstream等不包含debian配置文件的分支时,如何创建开发分支与打包分支
|
||||
|
||||
即从upstream建立openkylin/yangtze和packaging/openkylin/yangtze分支。
|
||||
|
||||
## 9.1 首先从gitlab上的kylinos-src clone一份干净的代码
|
||||
## 9.1 首先从gitee上的openkylin clone一份干净的代码
|
||||
|
||||
```Bash
|
||||
git clone git@gitlab2.kylin.com:kylinos-src/<包名>
|
||||
git clone git@gitee.com:openkylin/<包名>
|
||||
cd <包名>
|
||||
```
|
||||
|
||||
|
@ -671,7 +671,7 @@ git log upstream # 找到想要使用的commit id
|
|||
git tag upstream/1.2.3 031eae9e49ef7b523286410d45ee44ba57e29f79
|
||||
```
|
||||
|
||||
## 9.3 基于upstream标签创建packaging分支,添加debian打包配置文件
|
||||
## 9.3 基于upstream标签创建打包分支,添加debian打包配置文件
|
||||
|
||||
```Bash
|
||||
git checkout -b packaging/openkylin/yangtze upstream/1.2.3
|
||||
|
@ -689,7 +689,7 @@ gbp buildpackage --git-ignore-branch --git-tag --git-pristine-tar --git-pristine
|
|||
## 9.4 创建相应的开发分支,方便开发人员修改代码后本地测试
|
||||
|
||||
```Bash
|
||||
# 创建临时的集成patch分支,会自动命名为 patch-queue/packaging/openkylin/yangtze1
|
||||
# 创建临时的集成patch分支,会自动命名为 patch-queue/packaging/openkylin/yangtze
|
||||
gbp pq import
|
||||
# 重命名为标准的开发分支名称
|
||||
git checkout -b openkylin/yangtze
|
||||
|
@ -702,7 +702,7 @@ git add debian
|
|||
git commit -m 'change format to native'
|
||||
```
|
||||
|
||||
## 9.5 推送到gitlab服务器
|
||||
## 9.5 推送到git服务器
|
||||
|
||||
```Bash
|
||||
# 因为新建打包分支涉及到3个分支的修改,推送时使用push --all简化操作,这也是为什么一定要clone一份干净的代码来操作
|
||||
|
@ -710,34 +710,36 @@ git push origin --tags
|
|||
git push origin --all
|
||||
```
|
||||
|
||||
## 9.6 基于已有的打包分支创建新产线的分支
|
||||
## 9.6 创建新版本系列开发分支
|
||||
|
||||
假设已经存在openkylin/yangtze的打包分支,需要为yangtze-2209产线新建bug维护分支(分支名约定为openkylin/yangtze-2209),由包维护者在gitee上按如下流程操作:
|
||||
当前openkylin 1.0版本已发布,2.0版本的开发分支名称已确定为openkylin/nile,本节介绍如何实现2.0版本代码自动打包。
|
||||
|
||||
如果2.0版本不继承2.0版本代码开发,那么可以参考第9节进行,只需要把分支名称中的yangtze改为nile。
|
||||
|
||||
如果2.0版本继承1.0版本代码,由包维护者在gitee上按如下流程操作:
|
||||
|
||||
1. 访问仓库的分支列表
|
||||
|
||||
![img](https://gitee.com/openkylin/docs/raw/master/%E5%BC%80%E5%A7%8B%E8%B4%A1%E7%8C%AE/assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E5%88%9B%E5%BB%BA%E6%96%B0%E4%BA%A7%E7%BA%BF%E7%9A%84%E5%88%86%E6%94%AF%E7%A4%BA%E4%BE%8B1.png)
|
||||
![img](assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E5%88%9B%E5%BB%BA%E6%96%B0%E4%BA%A7%E7%BA%BF%E7%9A%84%E5%88%86%E6%94%AF%E7%A4%BA%E4%BE%8B1.png)
|
||||
|
||||
2. 点击“新建分支”
|
||||
|
||||
![img](https://gitee.com/openkylin/docs/raw/master/%E5%BC%80%E5%A7%8B%E8%B4%A1%E7%8C%AE/assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E5%88%9B%E5%BB%BA%E6%96%B0%E4%BA%A7%E7%BA%BF%E7%9A%84%E5%88%86%E6%94%AF%E7%A4%BA%E4%BE%8B2.png)
|
||||
![img](assets/openKylin%E6%BA%90%E7%A0%81%E5%8C%85git%E5%B7%A5%E4%BD%9C%E6%B5%81/%E5%88%9B%E5%BB%BA%E6%96%B0%E4%BA%A7%E7%BA%BF%E7%9A%84%E5%88%86%E6%94%AF%E7%A4%BA%E4%BE%8B2.png)
|
||||
|
||||
3. 输入分支名,分别新建两个分支:
|
||||
1. 输入分支名,分别新建两个分支:
|
||||
|
||||
yopenkylin/yangtze-2209 基于openkylin/yangtze
|
||||
openkylin/nile 基于openkylin/yangtze
|
||||
|
||||
packaging/openkylin/yangtze-2209 基于 packaging/openkylin/yangtze
|
||||
packaging/openkylin/nile 基于 packaging/openkylin/yangtze
|
||||
|
||||
|
||||
|
||||
# 10. 已有native格式的分支,转换成quilt格式
|
||||
|
||||
## 10.1 主线分支转换
|
||||
|
||||
(1)先基于当前版本创建upstream分支和tag
|
||||
|
||||
```Bash
|
||||
# 假设原来的分支名为master,changelog中的版本号为1.2.3,要创建的打包分支为openkylin/yangtze
|
||||
# 假设原来的分支名为master,changelog中的版本号为1.2.3,要创建的开发分支为openkylin/yangtze
|
||||
# 创建upstream分支
|
||||
git checkout -b upstream master
|
||||
# upstream分支不应该有debian目录
|
||||
|
@ -750,15 +752,15 @@ git tag upstream/1.2.3
|
|||
(2)创建打包分支
|
||||
|
||||
```Bash
|
||||
# 创建quilt打包分支
|
||||
# 创建打包分支
|
||||
git checkout -b packaging/openkylin/yangtze master
|
||||
# 版本号和源码包格式改为quilt
|
||||
dch -v 1.2.3-0k1 "quilt format" -D v101 --force-distribution
|
||||
echo '3.0 (quilt)' > debian/source/format
|
||||
git add debian
|
||||
git commit -m 'to quilt format'
|
||||
# 基于quilt分支创建新的native打包分支
|
||||
git checkout openkylin/yangtze
|
||||
# 基于打包分支创建新的开发分支
|
||||
git checkout -b openkylin/yangtze
|
||||
echo "3.0 (native)" > debian/source/format
|
||||
git commit -m 'to native format'
|
||||
# 测试打包,并保存pristine-tar信息
|
||||
|
@ -766,22 +768,6 @@ git checkout packaging/openkylin/yangtze
|
|||
gbp buildpackage --git-pristine-tar --git-pristine-tar-commit --git-ignore-branch -S -nc
|
||||
```
|
||||
|
||||
## 10.2 定制分支转换
|
||||
|
||||
定制分支应该尽量保持upstream版本与主线一致,但对于已经以native格式进行定制的包,版本号可能已经是1.2.3hw1这种形式,假如改为1.2.3-0k1hw1的形式会比原来的版本号小,只能继续使用定制的upstream版本号。
|
||||
|
||||
(1)创建定制的upstream分支和tag
|
||||
|
||||
```Bash
|
||||
git checkout -b upstream-hw hw
|
||||
git rm -rf debian
|
||||
git commit -m 'import hw upstream'
|
||||
git tag upstream/1.2.3hw1
|
||||
```
|
||||
|
||||
(2)创建打包分支,和主线分支相同,只是分支名称不一样。
|
||||
|
||||
|
||||
|
||||
# 附:个别问题处理
|
||||
|
||||
|
@ -803,7 +789,7 @@ gbp:error: Error creating kbd_2.0.4.orig.tar.xz: Pristine-tar couldn't checkout
|
|||
|
||||
dpkg-source: error: detected 1 unwanted binary file (add it in debian/source/include-binaries to allow its inclusion).
|
||||
|
||||
假如native分支涉及二进制文件修改,生成的patch也会有二进制信息,buildpackage时会提示`detected 1 unwanted binary file (add it in debian/source/include-binaries to allow its inclusion)`
|
||||
假如开发分支涉及二进制文件修改,生成的patch也会有二进制信息,buildpackage时会提示`detected 1 unwanted binary file (add it in debian/source/include-binaries to allow its inclusion)`
|
||||
|
||||
debian推荐把要替换的二进制文件放在debian目录中,再修改debian/*.install或者debian/rules的install步骤,在编译时覆盖上游的二进制文件。debian中包含二进制文件,无论是图片还是patch,都需要将文件路径添加到debian/source/include-binaries中,或者是直接在debian/source/options里添加一行include-binaries,允许包含任何二进制文件。
|
||||
|
||||
|
|
Loading…
Reference in New Issue