与Git合并并并行工作

与Git合并并并行工作,git,Git,我有一个git项目的几个分支,主要区别在于配置文件和blob。我希望将这些项目大部分合并并保持同步,因为一个分支上的开发也需要在其他并行分支上进行,但我不确定如何进行 我见过的大多数git指南和类似的东西都没有真正谈论它,我也不确定解决这类问题的最佳方法是什么 采摘樱桃也许是一种选择,但这当然意味着从事其中一个分支工作的人几乎失去了各种变化的全部历史。如果有一种方式可以说“cherrypick这个巨大项目中的所有东西,除了在这个文件中定义的文件”或其他什么,那么这可能仍然有效。不知何故,这似乎仍

我有一个git项目的几个分支,主要区别在于配置文件和blob。我希望将这些项目大部分合并并保持同步,因为一个分支上的开发也需要在其他并行分支上进行,但我不确定如何进行

我见过的大多数git指南和类似的东西都没有真正谈论它,我也不确定解决这类问题的最佳方法是什么


采摘樱桃也许是一种选择,但这当然意味着从事其中一个分支工作的人几乎失去了各种变化的全部历史。如果有一种方式可以说“cherrypick这个巨大项目中的所有东西,除了在这个文件中定义的文件”或其他什么,那么这可能仍然有效。不知何故,这似乎仍然是错误的。

我会将您的项目一分为二:

  • 核心项目(所有共享代码)
  • 配置/blob资产
您的核心项目应该有最少数量的分支-只有那些您需要开发的分支

您的配置repo包含其余部分

在“每个项目”的基础上,您可以使用诸如或之类的工具合并源(取决于项目的结构)

通过此设置,您可以将核心分支的数量保持在开发、测试和部署所需的最小值。配置分支是否出现分歧并不重要,因为您永远不必合并它们,在它们之间选择更改要简单得多,因为您不必确定更改是核心更改还是配置更改


它允许您拥有每个应用程序的配置,以修复核心项目中的特定标记或提交,因此在版本之间移动以进行测试等也应该容易得多。

我将您的项目分成两部分:

  • 核心项目(所有共享代码)
  • 配置/blob资产
您的核心项目应该有最少数量的分支-只有那些您需要开发的分支

您的配置repo包含其余部分

在“每个项目”的基础上,您可以使用诸如或之类的工具合并源(取决于项目的结构)

通过此设置,您可以将核心分支的数量保持在开发、测试和部署所需的最小值。配置分支是否出现分歧并不重要,因为您永远不必合并它们,在它们之间选择更改要简单得多,因为您不必确定更改是核心更改还是配置更改


它允许您拥有每个应用程序的配置,以修复核心项目中的特定标记或提交,因此在版本之间移动以进行测试等也应该更容易。

您真正想要的是一个好的分支模型。你应该看一看。它本质上是管理许多相关分支的好方法。这确实需要纪律,但从长远来看,这是值得的


当然,我假设您的配置文件和blob不是巨大的(千兆字节)。如果是,您可能希望使用子模块在单独的存储库中管理它们,正如@Hamish所建议的那样。

您真正想要的是一个好的分支模型。你应该看一看。它本质上是管理许多相关分支的好方法。这确实需要纪律,但从长远来看,这是值得的


当然,我假设您的配置文件和blob不是巨大的(千兆字节)。如果是,您可能希望使用子模块在单独的存储库中管理它们,正如@Hamish所建议的那样。

听起来您有一个带有多组配置文件的主分支。如果您只打算在任何时间点在每个分支中保留一组这样的文件,那么您可以维护一个主分支(包含所有公共文件),并在每个其他分支中作为单独的提交提交这些配置文件。无论何时更新主分支,您都需要根据它重新设置其他分支的基础,以便在最新更改的基础上应用它们的配置提交

main-------update 
      \
       \--branch1 for env1 (commited config for env1)
变成

main---update-- 
               \
                \-- rebased branch1 for env1 (commited config for env1)
甚至

main---update------------------------------merged with branch1-- 
               \                        /                       \
                \-some work in branch1-/                         \-rebased branch1 for env1 (commited config for env1)

听起来您有一个带有多组配置文件的主分支。如果您只打算在任何时间点在每个分支中保留一组这样的文件,那么您可以维护一个主分支(包含所有公共文件),并在每个其他分支中作为单独的提交提交这些配置文件。无论何时更新主分支,您都需要根据它重新设置其他分支的基础,以便在最新更改的基础上应用它们的配置提交

main-------update 
      \
       \--branch1 for env1 (commited config for env1)
变成

main---update-- 
               \
                \-- rebased branch1 for env1 (commited config for env1)
甚至

main---update------------------------------merged with branch1-- 
               \                        /                       \
                \-some work in branch1-/                         \-rebased branch1 for env1 (commited config for env1)

老实说,我不确定这个特定的答案与解决方案有什么关系。我通读了这个链接,但我不知道它应该有什么帮助。事实上,这就是我已经使用的模型——除了我有两个“主版本”,两个“发布版本”,这就是困难所在。老实说,我不确定这个特定的答案与解决方案有什么关系。我通读了这个链接,但我不知道它应该有什么帮助。事实上,这就是我已经使用过的模型——除了我有两个“主版本”和两个“发布版本”,这就是困难所在。这些似乎可以满足我的需要——不过,在接受之前,我必须先试用一下。我曾考虑为configs创建一个单独的项目,但我不想失去configs和项目之间的历史关系,因为它们几乎总是一起更新的。但是,如果有一种方法可以设置它,使配置项目提交连接到主项目提交,那么这应该是可行的。这些方法似乎可以满足我的需要,但在接受它之前,我必须先尝试一下。我曾考虑为configs创建一个单独的项目,但我不想失去configs和项目之间的历史关系,因为它们几乎总是一起更新的。如果有办法设置它,那么配置项目将提交