以下是问题所在,以及我们目前如何在工作中管理这个问题。
我们有一个构建菜谱,可以获取多个git存储库。有时,需要从我们不拥有的存储库(公共存储库)中修补模块。在我以前在另一家公司的职位上,我们通常会将所有的公共存储库分叉,并在不同的分支中推送补丁。这很好用,但在某些情况下,维护起来要困难得多,有时补丁确实是特定于特定客户端的,因此很难理解哪些分支是相关的,如果您必须授予开发人员权限,那么分叉50+存储库就不是特别容易管理了。同时,我们管理可以直接应用的补丁文件,而不需要分叉任何存储库。
在我目前的工作中,我决定限制自己修补文件,因为它简化了过程。从技术上讲,应用补丁和合并分支几乎是一回事。
修补程序存储在每个客户端存储库中,并应用于构建过程中。由于在获取多个存储库时,有些补丁将应用于projectA,而另一些补丁将应用于projectB .
现在,我正在编写构建配置文件中需要应用的每个修补程序,但我想知道是否有一种方法可以减少与配置的耦合。
就像应用补丁一样,我会应用一个补丁集,它将更接近一个可以应用多个“提交”的合并。但是修补程序集应该能够在多个目录/存储库中应用补丁。修补程序通常是使用git format patch为特定存储库制作的。
发布于 2017-05-04 08:49:48
对于类似的场景,我们使用了Quilt工具-修补程序集管理实用程序:https://wiki.debian.org/UsingQuilt。
基本上,您在项目根目录中有一个补丁目录,其中包含几个独立的补丁,由被子管理。修补程序dir可能如下所示:
patches/100_asserts.diff
patches/101_terminate_call.diff
patches/102_status_code477.diff
patches/107_parser.diff
patches/110_ssldefault.diff补丁按顺序应用(quilt push),可以不应用(quilt pop),更新(quilt refresh)等等。根据文件的逻辑将补丁分离到文件中是有意义的。
在拥有更多存储库的情况下,您可以创建一个新的包装git,并将依赖项作为git子模块。
patches/ <-- patches repo01, repo02
repo01/ <-- git submodule
repo02/ <-- git submodule在本例中,修补程序目录由git管理。
在单个存储库用例中,我们用来对存储库进行分叉,添加补丁dir,并在同一个存储库中维护补丁。
更新也可以通过:弹出所有补丁的quilt pop -a,git pull,quilt push补丁一个接一个,解决冲突,如果需要,通常quilt refresh做的工作。
还有一些直接与git集成的工具:
发布于 2017-02-21 12:40:02
根据我在您的问题中所理解的,当最佳解决方案可能直接使用版本控制系统时,您可能会经常使用补丁。补丁是为快速修复而制作的。
因此,如果我们使用的是我们不拥有的存储库,我们可以使用:
如果“补丁确实是特定于特定客户端的”,那么我们可能根本不想对这些公共存储库进行修补(它构建时考虑了另一种哲学/用例/体系结构),最好将备选方案用作:
我知道你想要一个补丁管理工具。但是这看起来就像一个版本控制系统(SVN,git,mercurial)!
但是,如果您确实需要使用补丁系统,您可以在projectA上创建一个配置文件,在projectB上创建另一个配置文件,(等等)来描述需要使用的补丁。这些补丁将存在于一个独立的存储库中。
https://softwareengineering.stackexchange.com/questions/342601
复制相似问题