【问题标题】:Side-by-side recursive Git submodules并排递归 Git 子模块
【发布时间】:2012-06-20 14:18:17
【问题描述】:

在我们公司,我们通过堆积几个框架/库来制作项目:

/Framework
/Extensions (depends on Framework)
/Business (depends on Framework & Extensions)
/Project A (depends on Framework & Extensions & Business)
/Project B (depends on Framework & Extensions & Business)
/Project C (depends on Framework & Extensions & Business)
/...

到目前为止,我们正在使用一个包含所有项目和框架的大型 git 存储库,并且我们使用git subtree 仅拆分框架以发布它(它是开源的)。

我们希望能够将这个大存储库拆分到不同的项目中,但是有这么多递归依赖项的事实让我担心:

AFAIK,两个 git 子模块/git 子树都要求所有库代码都在主存储库中,所以我们最终会得到这样的项目结构:

/Framework
/Extensions/Framework 
/Business/Extension/Framework
/Project A/Business/Extensions/Framework
/Project B/Business/Extensions/Framework
/Project C/Business/Extensions/Framework

我们不喜欢到处都有这么多的框架副本,也不喜欢框架文件夹在层次结构中的深度。

我们希望项目 A 存储库在拉取时断言存在一个与当前包含一些 SHA 的存储库并排,并检查此 SHA。

有没有办法并排制作 git 子模块/子树?

【问题讨论】:

    标签: git github git-submodules git-subtree


    【解决方案1】:

    您还没有描述你的开发环境,但你所描述听起来不从开发代码与Linux相关的/ usr / lib和/ usr / include目录一大堆不同的东西。许多项目依赖于共享库;为了编译成可执行存在需要安装的那些项目,库(框架和扩展),这些项目依赖于 P>的稳定版本

    在您的情况下,让我们假设 Framework、Extensions 和 Business 都是稳定的(或者至少只是不经常更新)。您将有三个结帐,例如:

    cd /stable
    git checkout -b version-x.y /path/to/Framework.git
    git checkout -b version-x.y /path/to/Extensions.git
    git checkout -b version-x.y /path/to/Business.git
    

    由每个开发人员执行,以便在他们的开发机器上获取这些“库”。每个项目都有引用这些库的构建/制作指令。 (该引用可能是绝对的/稳定/ ...或相对于“X计划”的位置。)这是一个扩展的扩展和框架的依赖的框架和业务依赖类似。 P>

    使用这种方法,每个克隆只有一个,但所有依赖项都已到位。

    [编辑] 如果每个项目都需要修改它所依赖的东西,上述方法将不起作用;如果是这种情况,那么您将无法避免多次克隆所有内容。而且,事实上,最好使用子模块进行克隆,以确保在适当的时候可以将一个项目的更改合并回主模块。

    【讨论】:

    • 不幸的是,情况并非如此,我们从每个项目中不断更改框架、扩展和业务(在其自己的分支上隔离了一段时间),我们喜欢这个库上的更改无缝迁移的事实项目到项目,没有严格的版本并且能够轻松更改/调试它们(它们是同一解决方案的一部分)。
    • 然后,优选的解决方案是使用子模块,这意味着必须具有(每个开发机器上)的多个副本。在这种情况下,拥有副本是一个优势;它允许每个项目成功,然后允许将更改重新合并。
    猜你喜欢
    • 2022-01-20
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-29
    相关资源
    最近更新 更多