我有两个代码库 A 和 B ,并且已经开始开发应用程序 M 。 所有这三个都存储在自己的存储库中。
我的问题是我有依赖关系, A 使用子模块 B ,但 M 使用两个子模块 A 和 B 。
据我所知,我将为同一个主项目提供相同子模块 B 的两个副本。但是它们在这个设置中永远不会有意义,因为它们在同一个应用程序中代表相同的库。
有没有办法解决这个问题,所以当我处理 M 时,我只有一份 A 和 B ?
答案 0 :(得分:1)
M--/
|-- A
| |-- B
|
|-- B
只需从M/B
移除M
子模块,然后保留/使用M/A/B
。
原因:
A
子模块(独立存储库),它必须需要B
。M
存储库,您可以教它使用M/A/B
。答案 1 :(得分:0)
请参见Guenther Bunthaler的very 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