我正在尝试为我们公司的开发团队建立一个 git 工作流。
这些约束适用:
- 我要检查的不是项目本身(它们是二进制的:-(),而是它们的导出。基本上这意味着项目的布局(由其导出表示)是给定的并且是固定的。
- 每个“项目”都存在“设备”、“库”和其他数据。
- “设备”和“库”包含“单位”,也许还有一些额外的数据。
- 这些导出是一组 xml 文件,其中包含每个设备、库和单元的内容。
- 仅导出完整的项目,而不仅仅是设备、库或单元。
- 每个设备、库和单元都将其内容放在一个文件夹(带有子文件夹)中。
- 存储库应驻留在服务器和每个用户计算机上的网络文件夹中(即每个链接的类型为 file://)。
- 不需要远程访问。
- 用户数量非常少(<10)
- 没有不受我们控制的存储库
项目的导出可能如下所示:
/exportFolder
/exportFolder/
device1 /exportFolder/
device1/unit1
/exportFolder/device1/unit1/一些文件,可能是其他子文件夹
/exportFolder/device1/
unit2 /exportFolder/device1/unit2/一些文件,可能是其他子文件夹
/exportFolder/device1/other东西,可能在子文件夹
/ exportFolder
/
device1
/index 文件中包含到每个单元
(其他设备)
的相对链接unit2
/exportFolder/library1/unit2/一些文件,可能是其他子文件夹
/exportFolder/library1/其他东西,可能在子文件夹中
/exportFolder/library1/index 文件包含到每个单元
(其他库)
的相对链接
/exportFolder/其他东西,可能在子文件夹中
/exportFolder/library1/index 文件包含到每个设备和库的相对链接
(链接可能不会离开它们的子文件夹,即以“..”开头的绝对或相对链接)
为了实现重用,我想像这样设置每个存储库:
~/repositoriesFolder/projects/project1
~/repositoriesFolder/projects/project2
...
~/repositoriesFolder/
devices/device1 ~/repositoriesFolder/devices/device2
...
~/repositoriesFolder /libraries
/library1 ~/repositoriesFolder/libraries/library2
...
~/repositoriesFolder/units/unit1
~/repositoriesFolder/units/unit2
...
项目中的设备和库应驻留在它们自己的存储库中,因此我打算将它们作为每个项目中的子模块。每个库和设备中的单元可以驻留在其包含的设备或库中,也可以作为子模块引用并存储在它们自己的存储库中。这存储在元数据中,我可以随每个单元一起使用。
此 repositoriesFolder 布局也存在于服务器上(所有都是裸存储库),位于 /repositoryServer/user1/(包含要从用户 1 合并到 master 的更改)/repositoryServer/user2/(包含要从用户 2 合并到 master 的更改) /repositoryServer/main/(包含主分支)
我打算的工作流程如下所示:
- 集成管理器创建一个项目并将其推送到 /repositoryServer/main/*
- 所有用户都从 /repositoryServer/main/* 克隆/更新他们的项目、设备、库和单元。
- 他们的子模块应该指向他们的本地存储库。这样一来,如果用户在一个单元中发现了一个错误,即使他没有连接到服务器,它也可以修复它并在包含该单元的其他项目中使用它。
- 他们将更改从 ~/repositoriesFolder/* 推送到 /repositoryServer/user1/*。
- 集成管理器从 /repositoryServer/user*/ 拉取更改,在本地合并/解析它们并将它们推送到 /repositoryServer/main/
- 转到 2
现在的问题;-):
- 这种工作流程方法可行吗?还有其他选择吗?
- 我怎样才能做到这一点:假设用户有一个空的本地存储库文件夹。在此用户从服务器获取第一个项目“project1”(仅包含设备“device1”,仅包含一个单元“unit1”)后,我希望在用户的计算机上进行以下设置:
- 在以前空的本地存储库文件夹中,现在有 3 个存储库:
- /项目/项目1
- /设备/设备1
- /单位/单位1
- project1 中的 device1 是一个子模块,指向对应的本地仓库
- device中的unit1是一个子模块,指向对应的本地仓库
- 对例如 project1/device1/unit1/someFile 的更改应该可以轻松推送到 2 个本地存储库和 /repositoryServer/user1/ 的存储库。
- 完整的变更流程:
- 项目 1 中设备 1 中单元 1 的更改
- “导出” => 更改 ~/repositoriesFolder/projects/project1
- ~/repositoriesFolder/projects/project1 中的“提交” => ~/repositoriesFolder/devices/device1 中的更改
- ~/repositoriesFolder/devices/device1 中的“某些命令(可能是自动)” => ~/repositoriesFolder/units/unit1 中的更改
- “一些命令” => 将所有更改推送到 /repositoryServer/user1/