web-dev-qa-db-ja.com

Gitリポジトリ内のGitリポジトリ

メインのgitリポジトリAがあり、メインプロジェクトのサブディレクトリにある別のgitリポジトリBのソースを使用しています。ここで、この使用済みサブディレクトリのAリポジトリ内でBリポジトリをチェックアウトするとよいでしょう。他の誰かがリポジトリを複製する場合はもちろん、メインリポジトリAを取得し、その中に自動的にBリポジトリを取得する必要があります。

ディレクトリ構造を視覚化してみましょう:

 + main_repository-メインリポジトリのルートディレクトリ
 + src-ソースを含むディレクトリ
 + foreignRepo-これは別のgitリポジトリのルートディレクトリである必要があります
 +バイナリ
 +その他

これはリモートリポジトリでも認識されている必要があります。他の人がこれをチェックしてすべてのものをコンパイルできる必要があるため、ローカルコピーだけでは役に立ちません。

37
Buuuh

Gitサブモジュール についてお読みください。

23
Adrian Petrescu

Gitバージョン1.7.11以降ではgit subtreeを使用してください。 git subtreeはgitサブモジュールより優れています

  • シンプルなワークフローの管理は簡単です。古いバージョンのgitがサポートされています(v1.5.2より前でも)
  • サブプロジェクトのコードは、スーパープロジェクトのクローンが作成された直後に使用できます
  • git subtreeでは、リポジトリのユーザーが新しいことを学ぶ必要はありません。サブツリーを使用して依存関係を管理しているという事実を無視できます。
  • git subtreeは、git submoduleが行うような新しいメタデータファイルを追加しません(.gitmoduleなど)。
  • サブツリーの内容は、依存関係の別のリポジトリコピーを他の場所に置かなくても変更できます

さらに、 既存のリポジトリのサブツリーを新しいリポジトリに切り離す が必要な場合は、git subtree splitが役立ちます。

UPDATE 2020年2月:最近は subrepo がさらに好きです。

8
John McGehee

サブモジュールを使用せずに2つのgitリポジトリをネストできます。 ChildRepoがParentRepoのサブディレクトリであり、両方がgitリポジトリであるとします。

+ ParentRepo
  - ChildRepo

ChildRepoにファイルを追加すると、ParentRepoはそれを無視します。コミットすると、ChildRepoに追加されます。 ChildRepo内のファイルをParentRepoに追加することはできません。

詳細: ネストされたGITリポジトリの問題!

6
Sjoerd