git repoを別のgit repo内に維持する


124

これが私が欲しいものです:

REPO-A
  /.git
  /otherFiles
  /REPO-B
    /.git
    /moreFiles

REPO-Aのコンテンツをすべて REMOTE-A にプッシュ、REPO-B だけをREMOTE-B にプッシュできるようにしたい。

可能?

回答:


104

Git サブモジュールを使用したいようです。

Gitはサブモジュールを使用してこの問題に対処します。サブモジュールを使用すると、Gitリポジトリを別のGitリポジトリのサブディレクトリとして保持できます。これにより、プロジェクトに別のリポジトリのクローンを作成し、コミットを個別に保つことができます。


19
ない正確に:それはプッシュしないであろうすべての repoAの内容:のみAプラスBへの参照をしかし、私はあなたの答えを批判していない、私はOPの質問を再読み込みするときほとんど同じ書き込みを急いでた;)
VonCを

1
これはほとんどサブモジュールのユースケースです。REPO-AとREPO-Bは、など、独自のコミット、起源、歴史、と、自分の右側にGitのリポジトリとして扱われます
ダミアン・ウィルソン

2
それで、私がその権利を読んでいる場合、見つけたものの完全に外側のsubmodule-dリポジトリを独立してチェックアウトできますか?どうすれば既存のリポジトリを取得して、別のプロジェクトのサブモジュールとして参照できますか?
JohnO、2011年

私はOPとまったく同じ解決策を探していませんでした。平均すると、これはおそらく、類似の質問に対する回答の検索がより多くなると思われます。 git REPO-B?」
jaya

64

私は常にシンボリックリンクを使用して、2つの別個のリポジトリを維持しています。


8
gitサブモジュールとgitサブツリーがどれほど混乱するように見えるかについては、これは有効な答えです。
Trevor Hickey、2014年

これは、複数のリモートリポジトリから1つのアプリケーションをアセンブルする場合にも非常に役立ちます
GeraldScott

22
2つの別個のリポジトリを維持するには、リポジトリBをリポジトリAに保持し、リポジトリBをリポジトリAに追加するだけでよいのではないでしょう.gitignoreか。
Fabien Snauwaert、2017

1
ファビアンの提案することを考えていましたが、その方法で問題はありますか?
theonlygusti

1
私はgitリポジトリを分離し、REPO-AにネストされているREPO-B(.gitなし)のコピーにREPO-Bに加えられた変更をコピーします。私はそれをrsyncで行います。rsync -avh --delete --exclude='.git' REPO-B/ REPO-A/REPO-B-copy/REPO-Bに変更があると実行されます
Shai

29

はい、作成したファイル階層を使用して、求めていることを正確に実行できます。Repo-Bは独立し、Repo-Aの知識はありません。Repo-Aは、自身のファイルとRepo-Bのファイルのすべての変更を追跡します。

ただし、これを行うことはお勧めしません。ファイルを変更してRepo-Bでコミットするたびに、Repo-Aでコミットする必要があります。Repo-Bでの分岐はRepo-Aで混乱し、Repo-Aでの分岐は不安定になります(フォルダーの削除などの問題)。サブモジュールは間違いなく進むべき道です。


53
単純にREPO-Bを/REPO-A/.gitignoreに追加できませんか?
mikkelbreum 2014年

2
@mikkelbreum私はまったく同じ考えを持っていました。現在、メインプロジェクトにサブバージョンを使用しており、サブフォルダーの1つでgitリポジトリを使用しています。SVNでは、git repoを含むフォルダーをsvn:ignoreプロパティに追加しただけで、gitでも同じことができるかどうかを尋ねていました。
2ndkauboy 2014年

3
ネストされたgitリポジトリを親リポジトリの無視リストに追加しても機能しない理由を理解できません。しかし、同時に、このアプローチはめったに見られない提案、そして多くの人々は入れ子になったgitリポジトリを思いとどまらせます。
mikkelbreum 2014年

18
この正確なシナリオを実装しました。リモートリポジトリにプッシュしたくないサブフォルダーにいくつかの非圧縮CSSファイルがあるので、それは.gitignoreにあります。しかし、私はこれらのファイルへの変更をローカルで追跡したいと思います。フォルダー内に非圧縮ファイルを含むリポジトリをセットアップし、すべてのファイルをそのリポジトリに追加しました。親リポジトリでは引き続き無視されますが、サブリポジトリ内の変更を追跡できます。推奨されるかどうかにかかわらず、このソリューションは、このような特定の状況の鍵となります。
BrianVPS 2015年

1
1つのリポジトリでブランチを切り替えるたびに、他のリポジトリで大量の変更が表示されることはわかりますが、なぜ「Repo-Aでのブランチは不安定になる(フォルダーの削除などの問題)」のでしょうか。どうも!
user2688151 2016

2

"git-subrepo"を使用することで、希望どおりの結果を得ることができます(REPO-Aリポジトリには、参照だけでなく、フォルダーREPO-B内のファイルを含むすべてのファイルが含まれます)。

https://github.com/ingydotnet/git-subrepo

一部の貢献者にsubrepoコマンドがインストールされていなくても機能します。完全なフォルダー構造が表示されますが、サブリポジトリへの変更をコミットできません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.