2011-02-10 5 views
9

私は自分のアプリケーションのディレクトリ構造にサードパーティ製のライブラリ(Junglinからのengaged.iphone)をクローンする正しい方法を見つけ出そうとしています。これは、最新の変更を取り込み、それらの変更をマージする方法ですローカルで作る。私はまた、自分のアプリのgit repoに、私が押したときにサードパーティ製のライブラリ(私の変更をマージしたもの)をインクルードすることを望みます。私は無事にこの方法をそれを設定するにはどうすればよいGit:サードパーティライブラリをアプリケーションのリポジトリのサブディレクトリに複製するにはどうすればいいですか?

myApp/ <- this is my app, which is its own git repo 
    external/ 
     engage.iphone/ <- this is the 3rd party library I want to keep up-to-date 
    mySource1.h 
    mySource2.m 
    ... 

構造はこのようなものになるだろうか?それがセットアップされた後、後で路上でマージするための特別なプロセスはありますか?

答えて

9

サブモジュールがこれを達成する最も簡単な方法です。

サブモジュールを使用して作業する一般的な方法は2つあります.1つは新しいモジュールを追加し、既存モジュールを初期化することです。

git submodule add <repository> external/engage.iphone:ローカルリポジトリランのルートから新しいサブモジュール

を追加

addコマンドは、リポジトリに最初にサブモジュールを追加しているときに、既存のサブモジュールを使用してリポジトリを複製したときとは異なります。リポジトリルートの.gitmodulesファイルにローカルまたはリモートパス上の別のリポジトリを追加します(リポジトリを公開する場合、他の開発者がこれにアクセスする必要があることを覚えておいてください)。次に指定した場所にリポジトリをクローンします。上記の例ではexternal/engage.iphoneです。この段階では、システムにサブリポジトリファイルがあり、それは.gitmodulesファイルとローカルリポジトリの両方のサブモジュールとしてリストされます。

あなたはサブモジュールを自分で追加していない可能性がありますしかし、あなたはすでにそれに追加のサブモジュールを持っているリポジトリをクローンしている場合...

既存のサブモジュールを初期化

物事は少し変更。この状況では、.gitmodulesファイルにはサブモジュールがリストされており、そこから検索する場所はありますが、ローカルリポジトリ設定は何も知らず、実際のファイルはシステムにはまだ存在しません。まず、サブモジュールを初期化する必要があります。

git submodule init

これはあなたの.gitmodulesに記載されている任意のリポジトリを介して実行して、.git/configのに追加されます。 Gitは今やリポジトリを知っているが、それは実際にはまだそれをクローン化し、これを実行していない:

git submodule update

あなたは、すなわちクローン不足しているものを登録し、サブモジュールを更新するには、このコマンドをいつでも実行することができます。あなたはサブモジュールを追加したときに、特定のコミットを指定しない限り

git submodule sync <submodule>

実行これは、そのリモートHEADにすべてのサブモジュールを更新します!特定のサブモジュールを指定すると、そのサブモジュールのみが同期されます。

git submodule update --init:真のgitファッションで

initコマンドは、時間を節約するためにupdateと組み合わせることができます。

もちろん、.gitmodulesと.git/configを手動で更新することができます(設定のブランチやリモートセクションに似ています)。

すべての詳細は、マニュアルページ(kernel.org version)にあります。

+0

ありがとうございました。私は今、このエラーが発生しています: "サブモジュールのマッピングは.gitmodulesのパス 'のために見つかりませんでした。engagement/contrib/json-framework' ... ...アイデア? –

+0

...これは "git submodule init"を実行したときに発生します –

+0

@SteveN addコマンドをどのように実行しましたか?あなたの.gitmodulesに何を入れましたか? – ghickman

関連する問題