2

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

现在我想用简单页面中的其他数据制作这个网站的副本,并且没有这些 seo 页面。

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

现在我想在站点的公共部分进行这些更改以显示在second分支中。

git checkout second,和git rebase master。Git 要求解决冲突以继续。好的,我修复了很多冲突,最后它重新设置了基础,甚至推送到了我的远程仓库。

但!如果我现在git rebase master再次尝试,我将再次遇到相同的冲突(即使我做了零修改!)并且必须重新进行疯狂的冲突解决:(

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

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

4

2 回答 2

3

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

3 路合并算法有一个属性,如果将分支 A 合并到分支 B,然后将分支 B 合并到分支 A,则两个分支将具有完全相同的内容。在 git 的情况下,它们实际上将指向相同的修订版,但即使在无法做到这一点并且具有单独修订版的版本控制系统中,它们的内容也将是相同的,因为它是合并算法所固有的。这使得分支非常适合并行工作,最终应该组合在一起,但对于维护独立版本非常不利。你可以做到,但至少必须有一个只有通用代码的基础分支,而且这很乏味,而且有很多方法可以搞砸。

有两种方法:

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

  2. 有一个仅包含公共代码(C) 的分支,以及从该代码派生的版本 (A 和 B) 的分支。您所做的更改仅适用于 A 上的 A,仅适用于 B 上的 B 和适用于 C 的更改并重新设置A 和B。这将起作用,但您将做很多来回切换和如果您在错误的地方进行了更改,则需要仔细挑选才能将其应用到您需要的地方。不过,它不需要任何预处理步骤。

于 2013-07-30T06:52:40.153 回答
1

当您想要在长期存在的分支之间合并内容时,第一次变基不是理想的工作流程。不时合并mastersecond肯定更容易维护,并且您将在合并的历史中保留痕迹。

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

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

  1. 用你最喜欢的工具解决你的冲突
  2. 已解决的阶段文件:git add .
  3. 让 Git 完成变基git rebase --continue

也许您需要一些时间来撤消 rebase并进行正确的合并。

于 2013-07-30T06:21:35.287 回答