1

私のプロジェクトには次のような状況があります。

2 つのソース コード リポジトリがありますが、それぞれにコードの一部 (場合によっては複数) 用の "共有" 領域が必要です。

リポジトリとそのフォルダー (およびこれらのフォルダー内のファイル) の次の構造を想定してみましょう。

レポ1

  • フォルダA
  • フォルダB
  • フォルダC

レポ2

  • フォルダA
  • フォルダD
  • フォルダE

「folderA」には、ファイルのまったく同じ「コピー」が含まれている必要があります。したがって、Repo1/folderA に何らかの変更をコミットしてから、Repo2/folderA をチェックアウト/更新すると、これらの変更を確認できるはずです。もちろん、反対方向でも同じように機能することができれば素晴らしいことです。

残念ながら、別の方法でソース コードを構成して、ある種の共有ライブラリを作成することはできません。

この問題を最善の方法で解決するのに役立つ VCS を探しています (SVN、Git など)。この種のセットアップの経験があり、何かお勧めできますか?

4

2 に答える 2

3

Subversion を使用している場合は、externalsを使用できます。これにより、リポジトリ内に共有コードを含む単一のフォルダーを作成でき、2 つのプロジェクト フォルダー内の各トランクには、この共有を指すように externals プロパティが設定されます。リポジトリの場所。

これは双方向であるため、共有フォルダーに変更を加えて、いずれかのプロジェクト フォルダーを更新したときに反映されるか、ローカル プロジェクト フォルダーから変更を加えて共有リポジトリ フォルダーに送信することができます。

ただし、外部の問題に注意する必要があります。

もう 1 つのオプションは、共有コードのソースをサード パーティのライブラリに完全に分離し、NuGet を使用してそのライブラリをさまざまなプロジェクトに簡単に展開することです。たとえば、 TeamCityは、共有ライブラリ コードのコミット時に NuGet パッケージをビルドできます (NuGet パッケージ サーバーとして機能します)。

于 2012-08-08T12:57:45.463 に答える
1

git を使用して、共有ファイル (folderA) だけを含む 3 番目の (共有) リポジトリを作成できます。次に、 Repo1 と Repo2 の両方がサブモジュールとして共有リポジトリを含めることができるため、次のようになります。

Repo1/folderA ->
     /folderB    \
     /folderC     \
                   -> Repo3/folderA
                  /
Repo2/folderA ->-
     /folderD
     /folderE

欠点:

  • レポ 1 と 2 のサブモジュール リンク自体はバージョン管理されているため、レポ 3 の HEAD で最新の変更を表示するには、両方のレポで folderA を明示的に更新する必要があります。
  • レポ 1 と 2 の両方の作業コピーがある場合、レポ 3 の 2 つのネストされたコピーも作成され、必ずしも同期されているとは限りません。

重要な場合の利点は、3 つのリポジトリすべてに個別に読み取りと書き込みのアクセスを許可できることです。


確かにずっと使いやすい

Repo/shared/folderA
    /project1/folderB
              ...
    /project2/folderD
              ...

可能であれば (ビルド システムも同様に簡単に機能する可能性があります)。ただし、2 つのプロジェクトを個別に許可することはできません。

于 2012-08-08T12:45:07.930 に答える