C 中复杂的存储库依赖关系,不浪费磁盘空间

问题描述 投票:0回答:1

假设我有 4 个带有 C 文件的 git 存储库。其他库所依赖的基础存储库

pair
声明了一个类型。

pair.h

typedef struct {
    int a;
    int b; 
} PAIR;

另外两个存储库

add
multiply
定义了对此类型的操作,并且都包含
pair
作为子模块或子树:

add.c

int add (PAIR p) {
    return p.a + p.b;
}

multiply.c

int multiply (PAIR p) {
    return p.a * p.b;
}

最后一个存储库

calc
,其中包含
add
multiply
作为子模块或子树,包含使用这两种操作的程序。

calc.c

int main (int argc, char *argv[]) {
    PAIR p;
    p.a = atoi(argv[1]);
    p.b = atoi(argv[2]);
    printf("sum = %d\n", add (p));
    printf("product = %d\n", mul (p));
    return 0;
}

问题是,如果我递归地克隆

calc
,那么
pair
将在
calc
的目录树中包含两次,尽管它只需要一次。如果实际结构变得更加复杂并具有多个依赖阶段,则会导致磁盘空间的巨大浪费。

如何以磁盘空间友好的方式组织它?

对我来说,每个存储库只有一个“当前版本”可以使用就很好了。

git git-submodules git-subtree
1个回答
0
投票

假设

calc
add
multiply
都可以使用相同版本的
pair
,我会声明
add
multiply
pair
作为
calc
的子模块。

我会从

pair
add
中删除
multiply
:这两个可以在其存储库之外查找
pair
../pair
而不是
./pair
)。

这样:

  • 你可以递归克隆
    calc
  • 只剩下一个版本的
    pair
  • calc
    负责获取
    pair
    add
    multiply
  • 的正确版本
© www.soinside.com 2019 - 2024. All rights reserved.