10

最新の変更を取得して、ローカルで行った変更とマージできるように、サードパーティのライブラリ (Janrain のengage.iphone) を自分のアプリのディレクトリ構造に複製する適切な方法を見つけようとしています。 . また、自分のアプリをプッシュしたときに、自分のアプリの 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
    ...

このように安全に設定するにはどうすればよいですか?設定後、後でマージするための特別なプロセスはありますか?

4

1 に答える 1

10

サブモジュールは、これを実現する最も簡単な方法です。

サブモジュールを操作するには、新しいサブモジュールを追加する方法と既存のものを初期化する方法の 2 つの一般的な方法があります。

新しいサブモジュールの追加

ローカル リポジトリのルートから次を実行します。

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 流に、initコマンドを と組み合わせてupdate時間を節約できます。

git submodule update --init.

もちろん、.gitmodules と .git/config が使用するレイアウトを理解したら、いつでも手動で更新できます (config のブランチとリモート セクションに似ています)。

すべての詳細は man ページ ( kernel.org version ) にあります。

于 2011-02-10T20:03:28.507 に答える