如何组织我的Git回购
我面临以下问题,但没有答案: 我们有一个从SVN回购中克隆出来的回购。该回购协议中存储的项目类似于一个平台软件,可供各种项目使用。回购协议的结构如下:如何组织我的Git回购,git,layout,repository,Git,Layout,Repository,我面临以下问题,但没有答案: 我们有一个从SVN回购中克隆出来的回购。该回购协议中存储的项目类似于一个平台软件,可供各种项目使用。回购协议的结构如下: platform |- core |- additional 由于某些原因,该回购协议的结构无法改变。核心和附加都包含属于该平台的数据 如果项目想要使用平台并添加一些功能,它会在additional下创建一个包含源的新文件夹,并将该功能的标题添加到additional/includes 目前,我们只需从master分支新项目,所有项目都
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状态
。现在您进行更改并将其提交(到
中环,你的电话在哪里)。由于中央连接到
平台/主机(checkoutcat.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
在两个分支中都工作,没有任何参数。我认为,如果你想保持你的中央回购协议干净,你必须与至少两个分支机构合作。中央项目存储库也可能是中央平台中的一个分支机构