使用不同的文件组织维护git分支

使用不同的文件组织维护git分支,git,phonegap-build,github-pages,Git,Phonegap Build,Github Pages,我正在做一个项目,我将其部署在gh页面上,并使用cordova/phone gap作为android应用程序 目前,这两种部署的代码非常相似,维护单独的分支并不是问题 然而,我最近尝试创建一个更深入的文件组织,但是phonegapbuild没有包含子目录中的文件 我担心,为了让这项工作,我将不得不以不同的方式组织两个分支中的文件,并将phonegap分支中的所有内容移动到www文件夹中 我不是git专家,但在研究这个问题时,这似乎会使两个分支之间的合并变得复杂 我只发现了一个问题: 是否有一

我正在做一个项目,我将其部署在gh页面上,并使用cordova/phone gap作为android应用程序

目前,这两种部署的代码非常相似,维护单独的分支并不是问题

然而,我最近尝试创建一个更深入的文件组织,但是phonegapbuild没有包含子目录中的文件

我担心,为了让这项工作,我将不得不以不同的方式组织两个分支中的文件,并将phonegap分支中的所有内容移动到www文件夹中

我不是git专家,但在研究这个问题时,这似乎会使两个分支之间的合并变得复杂

我只发现了一个问题:

是否有一种实用的方法来维护具有不同文件组织的并行分支?最好的方法是什么


我可以做些什么来保持两个部署的文件组织相同吗

维护不同的布局可能会部分解决问题的答案

默认合并策略仅合并最终结果,而不是每次提交

想必这只是选择合适的方法的问题?

你可以,我不会,但你可以采取这样的方法,合并总是从树的“规范形式”开始,到树,并与树的“规范形式”一起完成。(顺便说一句,这是一个修改版本,“规范化”行结束属性,这是合并配置控件
merge.renormalize
的作用。不幸的是,没有等效的文件名。)

也就是说,您将确保要合并的任何两个提交的合并基础始终是规范布局(这将从常规合并中自然消失,但是如果您想要选择一个提交,您将遇到问题)。然后,在进行合并之前,您将签出每个分支,修改树以将其转换为规范形式,然后提交。这意味着,如果我们绘制要合并的提交图:

          o--o--o--A   <-- branch1
         /
...--o--*
         \
          o--o--B      <-- branch2
现在,您可以检查这两个分支,并在必要时“取消规范化形式”它们:

          o--o--o--A----o     <-- branch1
         /          \
...--o--*            \
         \            \
          o--o--B------M--o   <-- branch2

o--o--o--A--o您可以将公共代码放在一个目录中,并在合并时使用git cherry pick,只选择该目录。您可以尝试将公共代码作为自己的项目,并通过git子模块包含在两个主要项目中:。我会研究为phonegapbuild创建链接,并将这些链接创建为该构建的第一步。实现这一点的不仅仅是默认策略,还有
git merge
命令本身。即使您编写自定义合并驱动程序并通过
.gittributes
安装它,您的合并驱动程序最多也会收到3个提交ID:基本提交、本地提交或“我们的”提交、远程提交或“其他”提交或“他们的”提交(Git的不同比特在这里使用不同的术语,可能是因为比特在某种程度上是从其他合并系统复制的)。与此同时,大多数策略都有两个头。“八达通”策略处理许多问题,但拒绝处理任何冲突,避开了“最多3个”的问题。(我应该说“文件ID”)由于合并驱动程序得到的是文件散列,而不是提交散列。
ours
策略可以解决多个头,但忽略了所有头,但我们的头除外,因此这也回避了问题;如果缺少一个版本,则没有实际的合并,因此合并驱动程序实际上总是得到三个ID。)你说所有构建系统都能明智地处理布局是什么意思?你是说不要使用目录结构,而是使用一个相对链接?这不是让你的项目目录树适应你的风险投资商的需要,而不是像它应该是一个独立的工具吗?@BruceAdams:顺序:(1)当然,不管需要什么;(2)是的。这不是最优的。如果Git有一种从“存储库名称”映射到“工作树名称”的方法,比如绕过Windows和Mac上的文件名限制,这可能会很好,但事实并非如此。如果有,映射将是一种用更少的(但在我看来仍然太多)实现这一点的方法扭曲。这里perforce和git的对比是+1。我想我可能会和git维护者一起追求这个目标。我想这需要一个突破性的改变来修复,但仍然值得去做。
          o--o--o--A----o     <-- branch1
         /          \
...--o--*            \
         \            \
          o--o--B------M--o   <-- branch2