用于保持自定义修改的开源软件最新的git工作流程?

时间:2010-09-29 16:30:18

标签: git open-source workflow branching-and-merging

我们的大学为我们管理的服务器上的校园部门提供网络托管服务。安装开源第三方程序需要在程序运行之前修改程序中的文件权限和代码。 (如果你熟悉的话,我们正在使用suEXEC。)

我们目前通过安装程序脚本提供WordPress。用户上传最新的稳定版本,并通过SSH运行服务器端PHP脚本。这个PHP脚本修改了所有文件/文件夹的文件权限,添加/删除了各种文件中的一些代码,并创建了一些新文件。当安装新的稳定版本时,这个安装程序脚本是一个麻烦的平衡行为

我想开始使用版本控制(特别是git)来跟踪我们的自定义更改,而不是依赖脚本来进行更改,但我不确定要使用的工作流程。我熟悉分支和合并,但不确定如何在发布新版本时集成我们的旧更改。

我的git工作流程应该如何整合WordPress核心的新更改,还能保留我们较旧的自定义更改?

2 个答案:

答案 0 :(得分:9)

我建议您将更改保留在分支中,并在更新时根据最新的WordPress重新分配该分支。在粗略的时间表中......

              +-- WordPress 1.0
              v
[master] --*--*
               \
[custom]        *--*--*     <- your customizations

当你想要更新WordPress时,切换到master并使用最新的源进行新的提交(或使用git-svn保持master同步):

              +-- WordPress 1.0
              |     +-- WordPress 1.1
              v     v
[master] --*--*--*--* 
               \
[custom]        *--*--*     <- your customizations

现在,您可以执行git rebase master custom重播最新更改,解决任何冲突。您的时间表将如下所示:

              +-- WordPress 1.0
              |     +-- WordPress 1.1
              v     v
[master] --*--*--*--* 
                     \
[custom]              *--*--*     <- your customizations

更新:提供一些基本原理...我喜欢这种解决此问题的方法,因为它可以明确区分WordPress的代码和您的自定义。当你得到一个新版本的WordPress时,你真的对“集成”不感兴趣。您有兴趣将自定义重新应用于新版本的WordPress。在我看来,通过rebase提交,最容易进行重新定制。任何冲突都意味着自定义可能会破坏,所以旧的自定义提交无论如何都是垃圾 - 最好只是在源头修复问题并保持更新的历史记录清洁。

更新master后,custom被重新定位并推送,协作者只会根据最新动态重新定义正在进行的工作。

这只是我的意见,作为一个坚定的基础&gt;合并支持者。 Git的美妙之处在于很少有正确答案。只需不断调整,直到找到适合自己的东西。

答案 1 :(得分:2)

我的一般方法是有两个分支,upstreammaster。创建您的存储库(将在master分支中启动),检入您使用的上游代码的最新副本,然后使用upsteram创建git branch upstream分支。此外,创建一个标记,指示您导入的上游版本,例如git tag wordpress-1.0。我通常使用轻量级标签(没有任何注释,基本上只是指向修订的指针)。

[wordpress-1.0]               Key: [tag]
v                                  branch
* <- upstream                      * commit
^- master 

现在,当您仍然在master分支时,复制您的更改并检查其中。您现在有两个分支,upstream包含原始上游源,{{1其中包含您的更改,其中的历史记录显示您对master所做的更改。

upstream

[wordpress-1.0] v * <- upstream \ +--* <- master 分支中进行所有修改。

master

当出现上游代码的新版本时,请检查[wordpress-1.0] v * <- upstream \ +--*--*--* <- master 分支(upstream),清除除git checkout upstream目录之外的所有内容,并复制新的上游版本。使用.git暂存上游版本中的所有更改,提交并标记它。

git add -A

现在,查看[wordpress-1.0] | [wordpress-1.1] v v *--* <- upstream \ +--*--*--* <- master ,然后合并您的上游更改。此时,您可以选择合并方式,例如采用新的上游版本,获取版本或进行合并更改,就像在正常合并中一样。

master

因此,所有更改都发生在[wordpress-1.0] | [wordpress-1.1] v v *--*--------+ <- upstream \ \ +--*--*--*--* <- master 上,并且所有上游版本都与master完全一致。这将让您最容易地看到您的代码与上游版本的不同之处,它将帮助您跟踪已与上游版本合并的更改,等等。

upstream

希望这有帮助,如果您有任何其他问题,请与我们联系。