首页 > 解决方案 > 在不修改存储库结构的情况下使用 git-submodule

问题描述

我有两个类似于以下结构的 github 存储库作为示例:

repo1: [folder_X] fileA fileB fileC fileD [folder_Y] fileE fileF

repo2: [folder_M] fileB fileC fileK [folder_N] fileO fileP

正如您在两个存储库中看到的,我们在 folder_X 和 folder_M 中有一些常见文件,它们是 fileB 和 fileC。我需要这些文件有一个共同的来源,所以我不需要总是在两个存储库中修改它们。例如,这些公共文件(B 和 C)可以存储在 repo1 中的单独分支中。

在不修改回购结构的情况下有什么解决方案吗?

标签: gitgithubgit-submodulesgit-subtree

解决方案


如果您坚持使用 git 子模块,请注意它在存储库的基础上工作,即您只能将完整的存储库树附加为另一个存储库的子文件夹。您不能过滤它,即您从根文件夹中获取完整的存储库,其中包含所有文件和子文件夹。因此,一种干净的方法是使用公共文件创建一个 repo3,并将其作为子模块链接到 repo1 和 repo2。

另一种可能的方法是,如果您将 repo1 视为公共文件的提供者,而将 repo2 视为衍生项目(消费者)。然后你可以将repo1链接为repo2的子模块,然后修改repo2以引用repo1子文件夹内的文件。这可以是对项目文件或构建脚本的修改,或者只是符号链接。

第三种方法是不使用 git 子模块,而是使用一些包管理器。例如,一些包管理器支持从存储库中创建一个仅包含几个文件的包,然后您可以从另一个存储库重用该包。


推荐阅读