使用共享子存储库的主GIT存储库

时间:2011-12-06 22:21:59

标签: ruby-on-rails ruby git repository branch

我使用 RoR 创建了一个基本的管理系统。它具有非常基本的功能,例如用户,角色,安全功能和基本UI。我想把这个项目放到一个主GIT存储库中。

如果我想创建未来的项目,我想以此基础项目为基础。我是否创造了分支?

MASTER PROJECT

MASTER PROJECT > SUB PROJECT#1

MASTER PROJECT > SUB PROJECT#2

因此,这两个子项目与主项目相同。如果我想对 MASTER PROJECT 中的任何文件进行通用代码更改,我该如何将更改细化到所有子项目。这是我的第一个问题

第二个问题:

如果我想对其中一个子项目的特定文件进行代码更改怎么办?

例如:如果我在 SUB PROJECT#2 (application.html.erb)中自定义布局,我希望该更改仅影响 SUB PROJECT#2 。我希望所有子项目都使用 MASTER PROJECT 中的application.html.erb,除非它已经更改(自定义)。如果 SUB PROJECT#2 仅包含一个自定义文件,那就太好了。所有其他丢失的文件都会回退到 MASTER PROJECT

第三个问题:

如果我在 MASTER PROJECT 中对application.html.erb进行了更改,则应该将该更改发送到所有子项目,除非其中一个子项目对该项目进行了自定义更改文件已经。在这种情况下, SUB PROJECT#2 可以。

我想要GIT:

a)在 SUB PROJECT#2

上跳过application.html.erb上的更新

OR

b)提示警告以允许某种合并。

这有意义吗?这种设置可行吗?会叫什么?我从哪里开始?

2 个答案:

答案 0 :(得分:2)

问题1

您可以使用分支来跟踪此情况。但是,您还应该考虑您所需要的只是一组模板。

Git本身不会执行自动合并。您可以编写脚本来执行此操作,但否则您需要在每个子项目分支上手动执行git merge

问题2

在创建分支时,您创建的任何分支最初都与原始分支(主分支)相同。在您从主分支提交更改或合并更改之前,它不会更改。让这个分支只包含一个自定义文件是没有意义的,所以如果你想使用版本控制分支,你可能想要考虑为什么要求它。分支可能只包含修改到一个文件,但没有任何内容强制执行此操作。

问题3

这就是git的设计目标。当您在子项目分支上执行git merge时,git将尝试自动合并内容,如果失败则会标记冲突并允许您手动执行合并。您还可以告诉git使用另一种合并策略,例如“保留本地版本”,但这是一种更高级的技术,可能不是您想要的。

我建议您从git-tutorial开始,并确保您对git中的分支有很好的理解。然后,重新审视这个想法,并确保它仍然有助于你想要实现的目标。

答案 1 :(得分:0)

将您的主项目放入自己的存储库并为每个项目创建一个新项目可能是正确的选择。有git submodule使您可以在项目中集成其他存储库。你应该尝试只在相关的存储库中进行项目特定的更改,可以通过git子模块更新主项目的更改!