两次引用相同的子模块

时间:2013-10-17 10:40:28

标签: git

我有两个代码库 A B ,并且已经开始开发应用程序 M 。 所有这三个都存储在自己的存储库中。

我的问题是我有依赖关系, A 使用子模块 B ,但 M 使用两个子模块 A B

据我所知,我将为同一个主项目提供相同子模块 B 的两个副本。但是它们在这个设置中永远不会有意义,因为它们在同一个应用程序中代表相同的库。

有没有办法解决这个问题,所以当我处理 M 时,我只有一份 A B

3 个答案:

答案 0 :(得分:1)

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

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

原因:

  1. 对于A子模块(独立存储库),它必须需要B
  2. 对于M存储库,您可以教它使用M/A/B

答案 1 :(得分:0)

请参见Guenther Bunthalervery detailed answer here

方法是通过将.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"

答案 2 :(得分:-1)

据我了解你的应用程序Mhierarс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