gpt4 book ai didi

git - 我如何使用 git 来跟踪 SRPM 定制?

转载 作者:太空狗 更新时间:2023-10-29 13:09:42 27 4
gpt4 key购买 nike

我们的团队经常对随 RHEL/CentOS 分发的各种软件包进行定制。我们的工作流程包括安装 SRPM、执行 rpmbuild -bp 来解压和修补源代码、进行我们的更改并创建一个 .patch 以包含在 specfile 中,以及构建新的自定义 SRPM 供以后使用模拟:

$ rpm -i grub-0.97-13.5.1.src.rpm
$ rpmbuild -bp rpmbuild/SPECS/grub.spec
$ cp -a rpmbuild/BUILD/grub-0.97 grub-0.97.orig
$ cd rpmbuild/BUILD/grub-0.97
# Make modifications, generate .patch against ".orig" copy
$ vim rpmbuild/SPECS/grub.spec
# Add custom .patch to specfile, update version, etc
$ rpmbuild -bs rpmbuild/SPECS/grub.spec
$ mock -r default-x86_64.cfg rpmbuild/SRPMS/grub-0.97-13.5.1.custom-1.src.rpm

这个过程运行良好,但我们目前没有使用任何形式的源代码控制来跟踪我们的修改和规范文件更改。基于我对 git 的(公认的基本)理解,我认为应该可以将它注入(inject)到这个工作流中并利用它的一些功能来优化一些步骤(除了 SCM 的正常好处之外)。

例如,我们可以创建上游补丁源的初始提交,然后进行修改,而不是创建源的副本以diff。准备就绪后,使用 git format-patch 创建我们的功能补丁并将其添加到规范文件中。

我也想对规范文件进行版本控制,尽管我不确定如何最好地实现它。


所以我的问题有三个方面:

  1. 有人在定制上游包时使用 SCM 吗?
  2. 将 git 集成到我们的工作流程中的最有效方法是什么?
  3. 是否有更好的工作流程更有利于版本控制的自定义 RPM 创作?

额外功劳:假设一个基于 git 的工作流程,我将如何构建一个中央存储库来接受推送?一个带有子模块的 repo 协议(protocol)?每个包一个 repo?

最佳答案

Does anyone out there use SCM when customizing upstream packages?

当然。这很常见。

What is the most effective way to integrate git into our workflow? Is there a better workflow that is more conducive to version-controlled custom RPM authoring?

我不知道最有效,但这就是我所做的。我开始以下 ~/.rpmmacros 文件:

%_topdir    %(echo ${RPM_TOPDIR:-$HOME/redhat})
%_specdir %{_topdir}/PACKAGES/%{name}/%{version}
%_sourcedir %{_topdir}/PACKAGES/%{name}/%{version}/sources
%_rpmdir %{_topdir}/PACKAGES/%{name}/%{version}/rpms

如果我安装一个包(比如 foo-1.0-1.src.rpm),spec 文件最终会在~/redhat/PACKAGES/foo/1.0/foo.spec,以及源压缩包(以及任何补丁)最终在 ~/redhat/PACKAGES/foo/1.0/sources 中。

现在我将包目录初始化为 git 存储库:

cd ~/redhat/PACKAGES/foo/1.0
git init
git add foo.spec sources/*.patch
git ci -m 'initial commit'

记录对 spec 文件的更改没有什么特别之处:

git ci -m 'made some really spiffy changes' foo.spec

如果我需要更改包源文件,我会这样做:

rpmbuild -bp foo.spec

现在我创建一个临时的 git 存储库:

cd ~/redhat/BUILD/foo-1.0
git init
git add .
git ci -m 'initial commit'
git tag upstream

从现在开始,如果我进行任何更改,我可以生成补丁像这样的上游包:

git diff upstream

或者如果我做了一系列提交,我可以使用 git 的 format-patch 命令创建一系列补丁:

$ git format-patch upstream
0001-added-text.patch
0002-very-important-fix.patch

并且可以将这些复制到相应的sources目录中并添加到规范文件。

请注意,我创建的用于跟踪更改的临时 git 存储库下次我运行 rpmbuild 时,构建目录将被删除。

关于git - 我如何使用 git 来跟踪 SRPM 定制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7535551/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com