web-dev-qa-db-ja.com

サブフォルダーを指すようにgitサブモジュールを変更するには?

サブモジュールチュートリアル をざっと見て、 botoプロジェクト からサブモジュールを作成しました。次に、このプロジェクトのサブセット、具体的には boto フォルダーのみが実際に必要であることを発見しました。

このフォルダを指すようにサブモジュールを変更したいと思います。 .gitmodulesを見ると、

[submodule "backup/src/boto"]
    path = backup/src/boto
    url = https://github.com/boto/boto.git

https://github.com/boto/boto.git の代わりに使用するURL URLを変更した後、botoフォルダーをローカルで削除して再プルする必要がありますか?

87
ripper234

サブモジュールのURLは常にリポジトリを指しているだけではないかと心配しています。gitが一般的に「狭いクローン」をサポートしていないのと同じように、リポジトリのサブフォルダのみを指定することはできません。

リポジトリ全体をサブモジュールとして使用できない場合は、botoから複製された新しいリポジトリを常に作成し、次のようにcronジョブを設定できます。

  1. git fetchそのディレクトリへのリポジトリ
  2. つかいます git filter-branchは、サブディレクトリが最上位にあるブランチを更新します。
  3. リポジトリのそのブランチをサブモジュールとして追加します。しかし、それは少し面倒で、私の好みはリポジトリ全体をサブモジュールとして持つことです。
57
Mark Longair

リポジトリの一部のみを複製することはできません。これは、gitがリポジトリをオブジェクト全体として扱うためです。取得すると、allになります。

したがって、ここでの解決策は、サブモジュールを別のディレクトリにフェッチし、シンボリックリンクを使用して目的を達成することです。

22
Artefact2

あなたがしたいのは、サブモジュールにブランチを作成し、フォルダを上に移動し、不要なものを削除することです。その後、代わりにそのブランチを管理できます。変更をプッシュアップする場合は、最初にマージを戻すことができるはずです。 Gitは、ファイルを移動し、マージを正常に実行したことを認識します。

お役に立てれば。

13
Adam Dymitruk