2016-05-25 69 views
2

我已经克隆了一个项目并对其进行了自定义。该项目正在使用一些额外的项目作为子模块。我已经设置了我的git存储库并将主项目推送到那里。但我没有将子模块添加到我的git项目中。向git添加子模块列表

我想将子模块拉到我的项目中。我知道使用下面的命令,我可以添加子模块逐一:

git的子模块添加<sub-m url> <path>

但他们一个都不少。有没有另一种方法来自动添加它们并一起?这里是子模块列表:

submodule "submodules/bcg729"] 
    url = git://git.linphone.org/bcg729.git 
[submodule "submodules/bctoolbox"] 
    url = git://git.linphone.org/bctoolbox.git 
[submodule "submodules/belcard"] 
    url = git://git.linphone.org/belcard.git 
[submodule "belle-sip"] 
    url = git://git.linphone.org/belle-sip.git 
[submodule "submodules/belr"] 
    url = git://git.linphone.org/belr.git 
[submodule "submodules/bzrtp"] 
    url = git://git.linphone.org/bzrtp.git 
[submodule "submodules/cmake-builder"] 
    url = git://git.linphone.org/linphone-cmake-builder.git 
[submodule "submodules/externals/antlr3"] 
    url = git://git.linphone.org/antlr3.git 
[submodule "submodules/externals/axmlrpc"] 
    url = git://git.linphone.org/axmlrpc.git 
[submodule "submodules/externals/bv16-floatingpoint"] 
    url = git://git.linphone.org/bv16-floatingpoint.git 
[submodule "submodules/externals/cunit"] 
    url = git://git.linphone.org/cunit.git 
[submodule "submodules/externals/ffmpeg"] 
    url = git://git.linphone.org/ffmpeg.git 
[submodule "submodules/externals/gsm"] 
    url = git://git.linphone.org/gsm.git 
[submodule "submodules/externals/libmatroska"] 
    url = git://git.linphone.org/libmatroska-c.git 
[submodule "submodules/externals/libupnp"] 
    url = git://git.linphone.org/libupnp.git 
[submodule "submodules/externals/libvpx"] 
    url = https://chromium.googlesource.com/webm/libvpx 
[submodule "submodules/externals/libxml2"] 
    url = git://git.gnome.org/libxml2.git 
[submodule "submodules/externals/mbedtls"] 
    url = git://git.linphone.org/mbedtls.git 
[submodule "submodules/externals/opencore-amr"] 
    url = git://git.linphone.org/opencore-amr.git 
[submodule "submodules/externals/openh264"] 
    url = https://github.com/cisco/openh264 
[submodule "submodules/externals/opus"] 
    url = git://git.linphone.org/opus.git 
[submodule "submodules/externals/speex"] 
    url = git://git.linphone.org/speex.git 
[submodule "submodules/externals/srtp"] 
    url = git://git.linphone.org/srtp.git 
[submodule "submodules/externals/vo-amrwbenc"] 
    url = git://git.linphone.org/vo-amrwbenc.git 
[submodule "submodules/externals/x264"] 
    url = git://git.linphone.org/x264.git 
[submodule "submodules/linphone"] 
    url = git://git.linphone.org/linphone.git 
[submodule "submodules/msamr"] 
    url = git://git.linphone.org/msamr.git 
[submodule "submodules/mscodec2"] 
    url = git://git.linphone.org/mscodec2.git 
[submodule "submodules/msopenh264"] 
    url = git://git.linphone.org/msopenh264.git 
[submodule "submodules/mssilk"] 
    url = git://git.linphone.org/mssilk.git 
[submodule "submodules/mswebrtc"] 
    url = git://git.linphone.org/mswebrtc.git 
[submodule "submodules/msx264"] 
    url = git://git.linphone.org/msx264.git 
[submodule "linphone"] 
    url = git://git.linphone.org/linphone.git 
+0

该名单是不是在'.gitmodules'文件?我只是'git clone https:// github.com/guardianproject/linphone-ios-secure'(这是一个与你具有类似子模块的项目),然后'git submodule update --init'完成了作业 – Asenar

+0

是的,我是使用Linphon android,但是我创建了一个不包含子模块的git存储库。我只是想处理我的代码,并且我不想将子模块添加到我的存储库中,我正在寻找一种方法来在本地克隆我的项目时在本地获取子模块。 – Sir1

+0

其实我在Linphone代码上做了很多工作,然后把它添加到我的仓库中。过了一段时间我要克隆它在另一个设备上,但子模块不存在,所以我想找到一种方式添加他们,当有人获取我的代码。我没有那么熟练git – Sir1

回答

3

我不认为有这样一个与git的方式。但是,您可以执行一个迭代您的列表的shell脚本,并逐个调用其中每个脚本的git submodule add


为什么只是将它们复制到.gitmodules或git的/索引不会做的伎俩:

的 “混帐子模块add” 命令做了几件事情:

  • 它克隆当前目录下的子模块,并默认检出主分支。
  • 它将子模块的克隆路径添加到“.gitmodules”文件中,并将此文件添加到索引中,准备提交。
  • 它将子模块的当前提交ID添加到索引,准备提交。

source

所以,你会错过最后一步,和git子模块的init /更新预计提交ID是已经到位。这就是为什么你需要git submodule add

+0

我要测试这个,我会告诉你结果,谢谢 – Sir1

+0

该死的看起来你是对的!这是一个耻辱,没有命令可以一次性添加一组回购,所以@eis回答是正确的。你可能有从该答案额外的帮助:http://stackoverflow.com/questions/7629822/is-it-possible-to-make-git-aware-of-an-existing-gitmodules-file/7656021#7656021 – Asenar

+0

我如你所说,写一个shell脚本来完成这个任务。它解决了我的问题。但我希望有另一种方式可以通过git来实现。多谢你们。 – Sir1

3

基于@eis建议,您必须创建一个脚本来制作所有git add命令。

做到这一点的方法是创建.gitmodules包含你的需求,然后用脚本解析它像这样的:

iterator=1; 
subpaths=$(git config --file .gitmodules --get-regexp path | awk '{ print $2}'); 
subrepos=$(git config --file .gitmodules --get-regexp url | awk '{ print $2}'); 
for path in $subpaths; do 
    repo=$(echo "$subrepos"| sed $iterator'q;d'); 
    git submodule add $repo $path; 
    let iterator++; 
done 
+0

谢谢@asenar – Sir1