8

我有两个代码库AB并已开始开发应用程序M。所有这三个都存储在它们自己的存储库中。

我的问题是我有一个依赖项,因此A使用子模块B,但M使用子模块AB

据我所知,对于同一个主项目,我将拥有同一个子模块B的两个副本。但是(在此设置中)它们不同是没有意义的,因为它们代表同一个应用程序中的同一个库。

有没有办法解决这个问题,这样当我在M上工作时,我只有一个AB的副本?

4

3 回答 3

2
M--/
   |-- A
   |   |-- B
   |
   |-- B

只需M/B从中删除子模块M,然后保留/使用M/A/B.

原因:

  1. 对于A子模块(一个独立的存储库),它必须需要B一些东西。
  2. 对于M存储库,您可以教它使用M/A/B.
于 2017-06-21T02:14:54.690 回答
0

据我了解,您的应用程序 M hierarсhy 是这样的:

M /
  |- A /
       |- B

因此,要将子模块B添加到A,您应该这样做(在文件夹 A 中)

git submodule add git@github.com:username/B.git

对于应用程序M,您应该执行相同的操作,但使用现有B的路径(在文件夹 M 中)

git submodule add git@github.com:username/B.git A/B
于 2013-10-17T11:24:48.960 回答
0

在此处查看Guenther Bunthaler非常详细的答案

该方法是通过将 .git 工作目录移到彼此的项目目录层次结构之外来展平目录以独立工作。

M/
A/
B/

哪里有指向和M/的反向链接子模块。 并且有一个反向链接子模块到.A/B/
A/B/

总的来说,在您确保所有子模块更改都已提交并推送后,

cd M/A
git submodule deinit -- B
rm -rf .git/modules/B
git mv -- B ../../
cd ..
git submodule deinit -- A
rm -rf .git/modules/A
git mv -- A ../
git submodule deinit -- B
rm -rf .git/modules/B
git mv -- B ../
echo "gitdir: A/.git" > "A/.git"
echo "gitdir: B/.git" > "B/.git"
cd ../A
echo "gitdir: B/.git" > "B/.git"
于 2020-04-08T19:40:09.453 回答