我的答案有两个部分,条件和解决方案。
第一部分:条件
我有同样的问题,但我已经有一个类似的存储库具有相同的结构,
说
Project1 (not a repo)
|___ Repo1
|___ Repo2
和:
Project2 (a repo)
|___ Submodule1 (same repo as Repo1)
|___ Submodule2 (same repo as Repo2)
我想将 Repo1 和 Repo2 转换为 Project1 的子模块,它与 Project2 基本相同。
明确地说,克隆 Project2 并不能解决问题,因为 Project1 和 Project2 中有更多的文件不一样,但为了简单起见..
所以我的 Project1 的 .git/config 看起来像这样
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
我的 Project2 的 .git/config 是这样的:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[submodule]
active = .
[remote "origin"]
url = ######
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[submodule "Submodule2"]
url = ######
[submodule "Subodule2"]
url = ######
在 Project2 中,有一个名为 .gitmodules 的文件:
我有同样的问题,但我已经有一个类似的存储库具有相同的结构,
说
Project1 (not a repo)
|___ Repo1
|___ Repo2
和:
Project2 (a repo)
|___ Submodule1 (same repo as Repo1)
|___ Submodule2 (same repo as Repo2)
我想将 Repo1 和 Repo2 转换为 Project1 的子模块,它与 Project2 基本相同。
明确地说,克隆 Project2 并不能解决问题,因为 Project1 和 Project2 中有更多的文件不一样,但为了简单起见..
所以我的 Project1 的 .git/config 看起来像这样:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
我的 Project2 的 .git/config 是这样的:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[submodule]
active = .
[remote "origin"]
url = URL/TO/Project2
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[submodule "Path/To/Submodule2"]
url = ######
[submodule "Path/To/Subodule2"]
url = ######
在 Project2 中,有一个名为 .gitmodules 的文件:
[submodule "Path/To/Submodule1"]
path = Path/To/Submodule1
url = ######
branch = master
[submodule "Path/To/Submodule2"]
path = Path/To/Submodule2
url = ######
branch = master
那该怎么办:
第二部分:解决方案
- 确保子模块具有相同的文件夹名称
Project1 (not a repo)
|___ Submodule1
|___ Submodule2
然后将Project2/.gitmodules复制到Project1/
然后将Projec2的.git/conif的内容子模块部分复制到Project1的.git/config,它基本上看起来像Project2,但没有覆盖[remote "origin"]:
我的 Project1 的 .git/config 是这样的:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[submodule]
active = .
[remote "origin"]
*url = URL/TO/Project1*
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master
[submodule "Path/To/Submodule2"]
url = ######
[submodule "Path/To/Subodule2"]
url = ######