21

多くのベンダーのObjective-Cライブラリ(たとえばfacebook-ios-sdk)は、リポジトリのファイル/ディレクトリの特定のサブセットをXcodeプロジェクトにコピーするように指示します。これに関する1つの問題は、ベンダーコードのリビジョンがわからないことです。もう1つは、ベンダーコードに変更を加えた場合、Gitを介して変更を提供するのは簡単ではないということです。

解決策として、各ベンダーライブラリをプロジェクトのリポジトリのGitサブモジュールとして追加し、いくつかの追加設定を追加します(たとえば、.gitmodulesファイル内)。このように、別の人が私のプロジェクトを複製して実行したgit submodule update --init場合、それらのリポジトリとサブモジュールは、私が設定したのと同じデフォルト設定を使用するため、私のものと同じ状態になります。

  1. スパースチェックアウト:サブモジュールの特定のファイルのみをチェックアウトします。
  2. 浅いクローン:サブモジュールの特定のSHA1のみをクローンします。

Gitサブモジュールに上記の設定を設定するにはどうすればよいですか?

4

3 に答える 3

18

git1.8.4 (2013 年 7 月)では、サブモジュールの git 浅い更新( ) に加えて、カスタム更新git submodule update --depth 1を行うことができます。

「rebase、merge、または checkout-detach」からの選択に加えて、「submodule update」では、カスタム コマンドを使用して、「submodule.*.update」構成変数を介してサブモジュールの作業ツリーを更新できます。

コミット 6cb5728c43f34a7348e128b44b80d00b9417cb19を参照してください。

ユーザーはsubmodule.$name.update' !command' に設定できます。これcommandにより、checkout/merge/rebase の代わりに ' ' が実行されます。
これにより、ユーザーは更新の実行方法をより細かく制御できます。

署名者: Chris Packham<judge.packham@gmail.com>

つまりcommand、サブモジュールの更新に (submodule.$name.update設定を介して) 使用できる ' ' をバージョン管理できることを意味します。
必要に応じて、そのスクリプトでスパース チェックアウトを実行できます。


2016 年 8 月更新 (3 年後)

Git 2.10 (2016 年第 3 四半期) では、次のことが可能になります。

 git config -f .gitmodules submodule.<name>.shallow bool

詳細については、「余分な重みのない Git サブモジュール」を参照してください。

于 2013-07-17T06:49:17.703 に答える
17

サブモジュールのスパース チェックアウトは、通常のスパース チェックアウトと同じ方法で実行できます。sparse-checkout各モジュールのファイルが に入るのを覚えておいて.git/modules/<mymodule>/info/ください。しかし、git 1.7 スパース チェックアウト機能で説明したように、スパース チェックアウトはまさにそれです: チェックアウト。ファイルを移動したり、設定を共有したりすることはできません。

于 2012-08-02T13:33:44.393 に答える
3

サブモジュールはレポの一部を実行できません。代わりにsubtree mergeをチェックアウトする必要があります。

于 2011-06-04T21:56:56.523 に答える