在上游更新上自动修补软件包

在上游更新上自动修补软件包

有没有办法在自定义补丁更新时自动将其合并到上游包中?根据我到目前为止收集到的信息,修改源代码需要您维护需要维护的单独的软件包分支。

我希望某些包管理器或其他工具可以在每次更新时自动修补小更改(不同的键绑定、图标等)。

这是不应该做的事情吗?这样做的目的是为了防止用户“霸占”他们的自定义更改并为上游做出贡献吗?

答案1

ObXkcd:https://xkcd.com/1319/

与任何事情一样,这可以自动化,但有一些限制;具体来说,您的更改可能不再适用于更新的上游。

如果您正在跟踪上游项目(而不是包),您可以在分支上进行更改,并定期对分支进行变基。例如,一个 cron 作业可以做

cd /path/to/local/repo
git fetch upstream
git rebase upstream/main

将给定存储库中的当前分支变基到上游存储库的主分支上(假设远程名称为“upstream”);如果成功,您的存储库将根据您应用的更改进行更新,如果没有,您将收到一封电子邮件,并且您必须手动解决问题。

如果您愿意,可以自动中止变基:

git rebase upstream/main || git rebase --abort

请注意,即使这看起来成功,结果也可能不起作用;上游更改完全有可能使下游补丁无效,同时仍然允许应用补丁。

如果您正在跟踪包裹,可能有一些工具可以帮助您。例如,Debian 衍生品有apt-src,可用于从源安装软件包。它支持upgrade升级本地安装的源包的操作,同时尝试保留本地更改。

相关内容