这是另一个GIT newb'。
这些项目基本上由一些常见项目(*)和一些应用程序项目组成。应用程序正在使用公共资源,公共资源也可以使用其他公共资源。通过“使用”,我的意思是他们共享源代码会很棒。或者至少项目可以使用共同项目的已编译dll。 以下是我希望文件夹结构如何的示例:
common
+-- basics
+-- gui
+-- utils
+-- win
+-- gui.win
+-- utils.win
app1
+-- win
+-- app.win
这里项目gui.win需要使用常见的> GUI。 app.win当然需要gui.win。
对于GIT存储库,我开始查看子模块。但它似乎是关于更多静态库。在app.win上工作的人需要做很多工作才能完成所有其他子模块,并确保拥有最新版本。
对于这些,唯一的解决方案似乎涉及一些脚本来处理依赖项。因此,它增加了日常工作流程的负担。熟悉GIT对于我们的日常工作来说已经足够了。
这个解决方案有很多好处。它看起来很干净。它明确区分了工作主题等。但我不知道如何以这种方式处理项目之间的依赖关系。 app.win如何引用(*)gui.win?
然后我认为唯一的解决方案是拥有一个包含所有内容的大型存储库。这是现实的吗? (给出一个数量级:来自这棵树的 common 应该少于10个项目,并且将有大约20个应用程序)。 然后,我们可以为每个应用程序使用 main 分支(一个用于 common )和子分支用于子项目,功能或热修复。 我们会将“app1.v1.0”这样的标签用于里程碑版本。
*由于我正在使用VisualStudio,我在这里使用了一些这个术语。项目是输出库或应用程序的一组文件。引用是指向另一个项目输出或访问源代码的链接(就像使用相同的项目有不同的解决方案)
答案 0 :(得分:2)
您可以将git子模块用于任何类型的子模块,它不仅限于静态库。例如,我的~/.vim
文件夹是版本化的,并为我安装的每个插件都有几个子模块。
我认为这是首选解决方案,因为主存储库可以记住项目使用的修订版本,并且您可以使用单个命令同步所有子模块。
因此,您可以让一个团队或一个人在子模块上工作,作为项目本身,进行更改,提交等等。如果要包含更改,只需在主存储库中执行此操作,您就不必为任何正在进行的版本而烦恼。