如何组织我的Git回购

如何组织我的Git回购,git,layout,repository,Git,Layout,Repository,我面临以下问题,但没有答案: 我们有一个从SVN回购中克隆出来的回购。该回购协议中存储的项目类似于一个平台软件,可供各种项目使用。回购协议的结构如下: platform |- core |- additional 由于某些原因,该回购协议的结构无法改变。核心和附加都包含属于该平台的数据 如果项目想要使用平台并添加一些功能,它会在additional下创建一个包含源的新文件夹,并将该功能的标题添加到additional/includes 目前,我们只需从master分支新项目,所有项目都

我面临以下问题,但没有答案:

我们有一个从SVN回购中克隆出来的回购。该回购协议中存储的项目类似于一个平台软件,可供各种项目使用。回购协议的结构如下:

platform
  |- core
  |- additional
由于某些原因,该回购协议的结构无法改变。
核心
附加
都包含属于该
平台
的数据

如果项目想要使用平台并添加一些功能,它会在
additional
下创建一个包含源的新文件夹,并将该功能的标题添加到
additional/includes

目前,我们只需从
master
分支新项目,所有项目都进入同一回购协议。这导致分支机构膨胀,我的(中央)回购越来越多,因为在单个项目中进行的所有承诺都流向中央回购(我的同事习惯于SVN,所以他们几乎在每次
提交后推送
——这是肯定的…)

首先我想到的是:将
platform
作为超级项目(称为
super
)下的子模块,然后转到
super/platform/additional/mystuff
,在那里创建源代码并将它们添加到
super
。但这显然不起作用,因为文件位于
平台
子模块内

有没有更好的方法来组织我的回购,以便:

  • 平台用户可以从中央回购协议更新其工作副本
  • 平台用户能够对
    平台
  • 使用
    平台的项目
    不会扰乱
    平台
    的回购

编辑1:涵盖了我所处的相当多的场景:紧密耦合的东西,我是唯一一个知道git绝对基础知识多一点的人,“大多数开发人员对git只有非常粗略的了解”。完美匹配


编辑2:
虽然来自的答案看起来很有希望,但我认为它有点太复杂,无法使用。我正在寻找一些真正简单的东西,不需要太多的交互。

我发现你对
master
的使用有点让人困惑,因为我从来不知道 您指的是整个平台存储库还是它的 主分支

我的解决方案如下:

  • 您有一个平台的中央存储库
  • 每个项目有一个中央存储库
  • 每个开发人员都有自己的本地存储库
中央平台存储库 这里只有平台代码。使用例如你的 以现有回购协议为起点

中央项目存储库 这是平台存储库的克隆,保留了所有代码 一个项目的一部分。开始

$ git clone --bare /path/to/platform
开发人员的本地存储库 初始化 作为开发人员,首先要克隆项目存储库

$ git clone /path/to/project
对项目进行更改 现在,进行更改,提交并将其推送到项目中 裸回购

$ editor some-file
$ git add -p some-file
$ git commit
$ git push
将其他开发人员对项目所做的更改拉到repo上 通过使用git pull

对平台进行更改 由于您还希望对平台本身进行更改,因此 需要一种访问平台回购的方式。因此,您将其添加为 远程回购到本地回购:

$ git remote add platform /path/to/platform
$ git fetch platform
正如您现在通过git branch-a所看到的,您的本地回购协议知道 关于站台。现在您想对 站台。首先创建一个本地中心分支,它是 平台回购主分支的克隆:

$ git checkout -b central platform/master
通过使用
git branch
git状态
。现在您进行更改并将其提交(到 中环,你的电话在哪里)。由于中央连接到 平台/主机(checkout
cat.git/config
)您可以按 只需使用
git push
即可更改平台回购。阿尔索
git pull
在没有任何其他参数的情况下工作

使用
git checkout master
git checkout central
更改 在你的树枝之间

在项目中获得新的平台版本 注意:您需要完成上一节的工作

首先更改平台分支并引入新版本 平台的功能:

$ git checkout central
$ git pull
现在返回到项目分支并合并在中所做的更改 将平台导入到您的项目分支中

$ git checkout master
$ git merge central
如果发生冲突,会发生如下情况:

$ git merge central
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
打开有冲突的文件,解决它们,将它们添加到 暂存区域并提交合并:

$ editor index.html
$ git add index.html
$ git commit
现在将更改推送到项目的裸回购:

$ git push
有关合并冲突的详细信息:

如果您不想更改平台回购,而是合并 从那里到您的项目使用的更改

$ git remote add platform /path/to/platform
$ git fetch platform
$ git merge platform/master
只有在第一次合并时才需要使用
git remote add
。 另外两个总是必需的


关于合并的部分是基于 由sa根据cc授权。这篇文章的所有其他内容可能是
已被视为公共领域。

更新了我的问题,以清理
主机(分行)和中央(回购)的使用。感谢您的提示。+1为您提供了合理的解决方案。但是我担心我不能把这个工作流程卖给我的同事……我知道对于svn用户来说这听起来很少见。但我认为它并不像听起来那么复杂。您可以在开发人员端提供一个脚本来进行设置。然后,她/他只需处理两个分支,即
主分支
中心分支
,以及它们之间的合并。另外,
git push
git pull
在两个分支中都工作,没有任何参数。我认为,如果你想保持你的中央回购协议干净,你必须与至少两个分支机构合作。中央项目存储库也可能是中央平台中的一个分支机构