gpt4 book ai didi

git - 我如何组织我的 Git 仓库

转载 作者:太空狗 更新时间:2023-10-29 13:11:24 25 4
gpt4 key购买 nike

我遇到了以下问题,但没有答案:

我们有一个从 SVN 存储库克隆而来的存储库。存储在该 repo 中的项目类似于一个被各种项目使用的平台软件。 repo 的结构是这样的:

platform
|- core
|- additional

由于某些原因,无法更改该存储库的结构。 coreadditional 都包含属于该 platform 的数据。

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

目前,我们只是从 master 分支出新项目,所有内容都进入同一个 repo。这导致分支膨胀并且我的(中央) repo 增长越来越多,因为在单个项目中所做的所有提交都转到中央 repo (我的同事习惯了 SVN,所以他们 push几乎在每次 commit 之后——只是为了确定……)。

我首先想到的是 submodules : 将 platform 保留为 super 项目(称为 super)下的子模块,然后转到 super/platform/additional/mystuff,在那里创建源代码并将它们添加到 super。但这显然行不通,因为文件位于 platform 子模块中。

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

  • 平台的用户可以从中央仓库更新他们的工作副本
  • AND 该平台的用户能够将错误修复应用到 platform 的 repo
  • 使用platform 的项目不会弄乱platform 的repo?

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


编辑 2:而来自 Michael 的答案看起来很有前途,我认为它使用起来有点太复杂了。我正在寻找不需要那么多交互的非常简单的东西。

最佳答案

我发现你对 master 的用法有点困惑,我从来不知道您是指整个平台存储库还是仅指其主分支。

我的解决方案如下:

  • 您有一个用于平台的中央存储库。
  • 每个项目您有一个中央存储库。
  • 每个开发人员都有他/她自己的本地存储库。

中央平台存储库

这是只有平台代码去的地方。使用例如你的现有的 repo 协议(protocol)作为起点。

中央项目存储库

这是平台存储库的克隆,保留了所有代码的一个项目。初始化它

$ git clone --bare /path/to/platform

开发者的本地仓库

初始化

作为开发人员,您首先要克隆项目存储库。

$ git clone /path/to/project

对项目进行更改

现在,进行更改、提交并将它们推送到项目裸 repo 。

$ editor some-file
$ git add -p some-file
$ git commit
$ git push

将其他开发人员所做的更改 pull 到项目裸仓库通过使用 git pull

对平台进行更改

由于您还想对平台本身进行更改,因此您也需要一种方法来访问平台 repo 协议(protocol)。所以你把它添加为远程 repo 到您的本地 repo :

$ git remote add platform /path/to/platform
$ git fetch platform

正如您现在可以通过 git branch -a 看到的那样,您的本地仓库知道关于平台。现在您想对平台。首先你创建一个本地分支 central 这是一个平台 repo 主分支的克隆:

$ git checkout -b central platform/master

你总是可以使用 git branch 检查你在哪个分支或 git status。现在您进行更改并提交它们(到中央,你所在的地方)。因为 central 连接到platform/master (checkout cat .git/config) 你可以推送你的只需使用 git push 即可更改平台存储库。还git pull 无需任何其他参数即可工作。

使用git checkout mastergit checkout central进行更改在您的分支机构之间。

在您的项目中获取新的平台版本

注意:您需要完成上一节的工作

首先更改您的平台分支并 pull 入新版本平台的:

$ git checkout central
$ git pull

现在回到你的项目分支并 merge 在将平台放入您的项目分支。

$ 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.

打开有冲突的文件,解决它们,将它们添加到暂存区并提交 merge :

$ editor index.html
$ git add index.html
$ git commit

现在将您的更改推送到项目的裸仓库:

$ git push

关于 merge 冲突的更多信息:Pro Git: Basic Merge Conflicts

如果你不想改变平台 repo 协议(protocol),但 merge 从那里更改为您的项目使用

$ git remote add platform /path/to/platform
$ git fetch platform
$ git merge platform/master

只有在第一次 merge 时才需要 git remote add。其他两个始终是必需的。


关于 merge 的部分是基于Pro Git Book这是根据 cc-by-sa 许可。这篇文章的所有其他内容可能是视为公共(public)领域。

关于git - 我如何组织我的 Git 仓库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6680768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com