据我了解,我认为您的问题是您没有正确理解子模块。这里有两种情况:
1) 您想将 OpenVBX 存储库用作存储库中的模块,但您无意更改 OpenVBX 存储库本身中的代码,也就是说,您将“按原样”使用库而不修改它。在这种情况下,您需要做的就是:
git submodule add git://github.com/twilio/OpenVBX.git plugins/OpenVBX
其中 plugins/OpenVBX 是您希望将其添加到您自己的存储库中的路径。例如,我在我的设置中执行了这些步骤,它的外观如下:
~/Personal$ mkdir test
~/Personal$ cd test/
~/Personal/test$ echo "Test repo for playing around with submodules" > README
~/Personal/test$ mkdir plugins
~/Personal/test$ echo "I'll keep my plugins here" > plugins/README
~/Personal/test$ git init
Initialized empty Git repository in /home/vedang/Personal/test/.git/
~/Personal/test$ git add .
~/Personal/test$ git commit -m "Initial commit"
[master (root-commit) 4539047] Initial commit
2 files changed, 2 insertions(+), 0 deletions(-)
create mode 100644 README
create mode 100644 plugins/README
~/Personal/test$ git submodule add git://github.com/twilio/OpenVBX.git plugins/OpenVBX
Initialized empty Git repository in /home/vedang/Personal/test/plugins/OpenVBX/.git/
remote: Counting objects: 2055, done.
remote: Compressing objects: 100% (1315/1315), done.
remote: Total 2055 (delta 1132), reused 1430 (delta 695)
Receiving objects: 100% (2055/2055), 4.96 MiB | 25 KiB/s, done.
Resolving deltas: 100% (1132/1132), done.
~/Personal/test$ git add .gitmodules
~/Personal/test$ git add plugins/OpenVBX
~/Personal/test$ git commit -m "Added openvbx as a submodule"
[master 5318022] Added openvbx as a submodule
2 files changed, 4 insertions(+), 0 deletions(-)
create mode 100644 .gitmodules
create mode 160000 plugins/OpenVBX
~/Personal/test$ git log -p
commit 5318022936429a34cabddfeedc3574f7744127c3
Author: Vedang Manerikar
Date: Sun Jun 5 16:04:11 2011 +0530
Added openvbx as a submodule
diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..bbde679
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "plugins/OpenVBX"]
+ path = plugins/OpenVBX
+ url = git://github.com/twilio/OpenVBX.git
diff --git a/plugins/OpenVBX b/plugins/OpenVBX
new file mode 160000
index 0000000..ade10d8
--- /dev/null
+++ b/plugins/OpenVBX
@@ -0,0 +1 @@
+Subproject commit ade10d86fd9556e840f337c255037c163facd2a3
如您所见,对于 git,子模块只是指向其他存储库中某个 SHA 的提交 ID。它不关心子模块目录的结构。
2) 如果您还想修改子模块中的代码,唯一的主要区别是您应该对作为子模块添加的存储库具有写入权限。在 github 上,这就像分叉父存储库并将分叉的 repo 用作子模块一样简单。在这种情况下,git 也会将您的子模块视为主存储库中的 SHA。但是,如果您在子模块目录(在我们的例子中是插件/OpenVBX)中执行 git status,您将能够在那里提交您的更改并将它们推送到子模块存储库。
与简单地将源代码复制到存储库相比,使用子模块具有一些优势。主要优点是您可以与原始库保持同步,并从额外的代码和错误修复中受益。我建议您在放弃之前尝试再使用一次子模块。