【问题标题】:Seeking for advice how to structure git repository/branch寻求建议如何构建 git 存储库/分支
【发布时间】:2016-05-13 09:14:33
【问题描述】:

我已经阅读了各种 git 教程,但对于如何使用 git 存储库和分支仍有一些悬而未决的问题。

这是我的情况:

我有一个由外部合作伙伴维护的代码库“A”,并且每隔几个月我就会收到源代码更新。基于代码库“A”,我构建了另一个产品“B”,这是我的核心产品。然后,我使用产品 B 作为客户的基础。每个客户都有自己的小调整。因此,我也为每个客户维护单独的代码库。视觉上看起来像这样:

     A
     |
     B
  / / \ \       
 C  D  F G

现在问题来了:) 每次代码库“A”或“B”发生更改时,我都有一项艰巨的任务是将所有更改合并到其他代码库。我正在寻找一种如何利用 Git 为我简化此代码合并任务的方法。

通过阅读教程,我学到了很多东西。但是,对于我的存储库/分支结构应该是什么样子,我仍然有基本的问题。以下是我的问题:

  • 是否需要为每个代码库提供存储库?
    • 如果是,我如何在不同的存储库之间执行代码合并?
  • 我应该为每个代码库创建一个包含多个分支的存储库吗?

    • 我的主分支应该是什么?甲还是乙?
    • 应该如何进行合并?通过使用rebase
    • 分支是否存储在单独的文件夹中?
  • 是否有另一种(更好的)解决问题的方法?

任何帮助都会很棒! 谢谢

【问题讨论】:

    标签: git merge repository branch


    【解决方案1】:

    目前还不清楚 A 和 B 之间的切口是否干净。您可以决定将它们全部放在一个存储库中并分离目录,或者将它们放在单独的存储库中并使 A 成为 B 的子模块,也许。这在一定程度上取决于您如何接收这些更新。

    至于树枝;您可以为 B 的每个变体创建一个分支,然后每当您对其他代码库也应该具有的 B 进行更新时,您只需将 git merge B 适当地添加到其他分支中。由于您似乎正在为每个代码库修改 B(而不是扩展它),因此将 B 作为子模块在这里不起作用。

    关于分支的单独文件夹:不,不是直接的。当您查看一个分支时,其他代码在您的工作目录中不可用。您必须签出不同的分支才能切换到其他代码库,从而更改工作目录的内容。不过,如果您发现自己经常切换,您可以设置multiple working trees。不过,这是一个实验性功能,当您同时使用子模块时会出现一些错误。您还可以考虑简单地维护同一存储库的多个实例,接受开销。或者只是在需要时在分支之间切换。

    【讨论】:

    • A 和 B 之间没有明确的界限。我可以在所有具有不同内容的分支中拥有相同的文件“foo.txt”。例如:在 A 上 foo.txt 是 '"boo"'; on B '"Boo with B"'; on C - '"B&C 的嘘声"'; on D - '"B&D 的嘘声"'
    • 对,子模块的想法不适用。这听起来像 6 个分支,并且向一个方向合并(即当 A 更新时,将其合并到 B,然后将 B 合并到 C/D/E/F)
    猜你喜欢
    • 1970-01-01
    • 2015-02-22
    • 2018-03-08
    • 2019-07-07
    • 2012-03-20
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 2020-12-03
    相关资源
    最近更新 更多