2011-07-06 7 views
5

私たちはgitに移行しています。私たちは製品を構成する多数のモジュールを持っていますが、そのうちのいくつかは製品間で共有されています。唯一のサブモジュールが含まれます。製品は、「薄い」スーパーリポジトリ(//server/product.git SSH):で表されるサブモジュールとnティアの使用方法リポジトリ戦略

[submodule "module1"] 
path=module1 
url=ssh://server/product/module1.git 
[submodule "module2"] 
path=module2 
url=ssh://server/product/module2.git 
... 

が、私はスーパーのリポジトリのクローンを作成し、サブモジュールで動作し、それらをコミットすることができ、およびサブモジュールをスーパーリポジトリにコミットします。

別の層を導入したいときに問題が発生します。 2つの基本的なシナリオ(これは、より複雑な設定をするために組み合わせることができますが、何がこれらの組み合わせでなければなりません)があります。開発者として

  1. が、私は中央リポジトリと作業のクローンを作成します。次に、変更をセントラルリポジトリにマージする前に、私のコードを継続的インテグレーションサーバに提出したいと思います。私はCIサーバーが私のレポをクローンにさせました。これはうまくいかないので、CIサーバはスーパーリポジトリをクローンし、サブモジュールを中央のリポジトリの場所からクローンします(gitmodulesの中にあるのでそれです)。

  2. 私たちが前に働いていた統合リポジトリをチームにまとめるには、スプリントの終わりにコードを中央リポジトリにマージします。これは同じ理由で失敗します。

Iはサブモジュールのための相対URLを指定しようとしたが、これは動作しない、のいずれかで、我々は、3段目に第二層をクローニングするとき、相対URLが第二層のリポジトリ位置に対する解決するため、しかし第2層サブモジュール位置は、第2層スーパーリポジトリ内にある。

私はそれを両方とも持ちますか? Gitサブモジュールとn層リポジトリ構造

+0

解決方法を見る:http://stackoverflow.com/questions/6031494/git-submodules-and-ssh-access – Cybot

答えて

0

サブモジュールでは相対リンクが機能しません。すべてのリポジトリを格納するためにgitoliteを使用してください。それであなたの構造は機能します。

その他のURLにも問題がありました。例は、サブモジュールに対して与えられた..\someotherrepoまたは​​のURLまたはfile:///\\server\...のURLである。

+0

私はギトライトの簡単な概要を読みましたが、私の使用事例にどのように対処しているのか分かりません。それはあなたのための認証と承認を処理しますが、私は_that_問題がありません。 関連するドキュメントへの簡単な例またはポインタが役立ちます。 – simon

+0

Gitoliteはsshのことを世話し、git-friendly URLを与えます。小型のubuntuサーバVM上で実行されているGitoliteは、この問題やその他の問題のために負荷をかけています。 URLは 'gitolite @ gitserver:somerepo.git'になり、サブモジュールとそのURLの形式には問題はありませんでした。それは私にとって同じ問題を解決したものなので、ここでそれを提案しました。私はあなたが待って、他の答えが出てくるか、#git ircのチャンネルに飛び乗るかどうか見ることができるでしょうか? –

0

私が正しく理解していれば、他のサブモジュール内にgitサブモジュールを置いて、トップレベルのリポジトリをチェックして、入れ子になったサブモジュールのすべてのレイヤーを正しくチェックアウトすることができますか?

私は決してこれをやったことはありませんが、Git submodule inside of a submodule (nested submodules)は読み応えがあります。

+0

私はクローンをクローンし、すべてのサブモジュールを正確にクローンすることができるようにしたい。 – simon