如何使用git维护2个版本的站点?

时间:2013-07-29 23:03:44

标签: git

我开发了一个网站,其中包含一些功能和一些基本页面,如“关于我们”,“联系人”和一些SEO页面。它位于git存储库中。

现在我想用简单页面中的其他数据和没有这些seo页面来复制此网站。

所以我git branch second编辑了它并对该分支中的文件进行了一些修改和删除。 然后我回到主人并添加了一些功能,错误修正和其他一些东西。

现在,我希望在网站的公共部分进行这些更改,以便在second分支中显示。

git checkout secondgit rebase master。 Git要求解决冲突继续。好的,我修复了一个很多的冲突,最后它又变形了,甚至推进了我的远程仓库。

BUT!如果我现在再次尝试git rebase master,我将再次得到相同的冲突(即使我没有做任何修改!)并且必须重新做出疯狂的冲突解决方案:(

我以为它会记住我在每个冲突情况下的行为,并且只会在新的地方询问我有新功能/错误修正。但事实并非如此。

如何设置我的两个分支以维护2个网站而不会受到伤害?也许合并?其他一些命令?

2 个答案:

答案 0 :(得分:3)

分支是维护并行版本的错误工具。

3向合并算法具有如下属性:如果将分支A合并到分支B而将分支B合并到分支A,则两个分支将具有完全相同的内容。在git的情况下,它们实际上将指向相同的修订版,但即使在版本控制系统中不能这样做并且具有单独的修订版,它们的内容也将是相同的,因为它是合并算法中固有的。这使分支机构非常适合并行工作,最终应该组合在一起,但对于维护独立版本却相当糟糕。你可以做到这一点,但至少必须有一个仅使用 公共代码的基本分支,这很繁琐,并且有很多方法可以解决这个问题。

有两种方法:

  1. 为公共代码和单独的文件提供单个分支和单独的文件以及特定于站点的数据,并使用一些预处理步骤或服务器端包含来生成最终的HTML。这是人们通常用软件做的事情,并且经验证明可以轻松扩展到数十个或更多版本。您要使用的内容称为静态站点生成器。你可以start by looking here

  2. 使用公共代码(C)创建一个分支,并使用从中派生的版本(A和B)进行分支。你所做的修改仅适用于A上的A,那些仅适用于B上的B和适用于C和 rebase A和B的更改。这样做会有效,但你会做一个很多来回切换,如果你在错误的地方做出改变,需要仔细挑选樱桃,以便在你需要的地方使用它。不过,它不需要任何预处理步骤。

答案 1 :(得分:1)

当您想要在长期分支之间合并内容时,首次重新定位不是理想的工作流程。将时间master合并到second当然更容易维护,并且您将在合并历史记录中保留跟踪。

至于你的问题,正如亚当指出的那样,必然会发生其他事情,因为当一个rebase成功时,第二个没有效果。也许你在解决冲突后没有做git rebase --continue,并认为你必须重新做git rebase

如果在rebase期间发生冲突,正确的做法是:

  1. 使用您最喜欢的工具解决冲突
  2. 已解决的舞台文件:git add .
  3. 让Git用git rebase --continue
  4. 完成变基

    也许你会花一些时间来undo the rebase,并做出正确的合并。