2016-05-25 24 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のコードで多くの作業を行い、それを私のリポジトリに追加しました。しばらくしてから別のデバイスでクローンを作成しようとしていますが、サブモジュールが存在しないので、誰かが私のコードを取得したときにそれらを追加する方法を見つけたいと思います。私はそれほど熟練していません – Sir1

答えて

3

私はgitでこのような方法はないと思います。しかし、あなたのリストを反復するシェルスクリプトを実行し、それぞれをgit submodule addと呼び出すことができます。

だけ/インデックスを.gitする.gitmodulesにコピーしたりすることはトリックを行うことはありませんなぜ

コマンドを "gitのサブモジュールを追加するには、" 物事のカップルを行います

  • 現在のディレクトリの下にあるサブモジュールを複製し、デフォルトでmasterブランチをチェックアウトします。
  • サブモジュールのクローンパスを ".gitmodules"ファイルに追加し、このファイルをインデックスに追加して、コミットする準備をします。
  • サブモジュールの現在のコミットIDをインデックスに追加して、コミットする準備ができました。

source

は、だから、最後のステップを逃すことになる、とGitのサブモジュールのinit /更新がコミットIDがすでに適所にあることを期待しています。だからあなたはgit submodule addが必要です。

+0

私はこれをテストするつもりです、私は結果をあなたに教えてくれる – Sir1

+0

それはあなたが正しいと思わせた!そしてそれは残念ですが、すぐにrepoのグループを追加するコマンドがないので、@eis答えは正しいものです。あなたは、その答えから追加のヘルプを持っているかもしれません:http://stackoverflow.com/questions/7629822/is-it-possible-to-make-git-aware-of-an-existing-gitmodules-file/7656021#7656021 – Asenar

+0

Iあなたが言ったようにシェルスクリプトを書いてください。それは私の問題を解決します。しかし、私は別の方法があったことを望むそれは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

関連する問題