1

次の内容の git リポジトリ A があります。

 <shared files dir>/
        sharedFile1
        sharedFile2

そして、追加の git リポジトリ B に 2 つのプロジェクトがあり、それぞれがリポジトリ A の共有ファイルを使用する必要があります。そのため、ファイル構造は次のようになります。

Project_X
   <shared files dir>/
      sharedFile1
      sharedFile2
   <project X dirs>

Project_Y
   <shared files dir>/
      sharedFile1
      sharedFile2
   <project Y dirs>

共有ファイルがリポジトリ A でのみ更新されるようにしたいのですが、project_X と Project_Y がそれらの更新を簡単に取得できるようにする必要があります。

実際には、シンボリック リンクは私が必要とする正確な解決策かもしれませんが、残念ながら、私が使用しているファイル システムはそれをサポートしていません。

Git サブツリーも適切な解決策のように見えますが、問題は、同じブランチから同じリポジトリ内の 2 つの場所にサブツリーをマージする方法が見つからなかったことです。必要なファイル構造を作成することに成功しました:

git read-tree --prefix=Project_X/shared_files_dir/ -u shared_remote_branch
git read-tree --prefix=Project_Y/shared_files_dir/ -u shared_remote_branch

必要なファイル構造を作成します(質問の冒頭で説明したとおりです)が、更新をマージしようとすると、作成した最後のサブツリーにのみ変更が加えられます。

git merge --squash -s subtree --no-commit shared_remote_branch

Project_Y/shared_files_dir/ のみを更新し、Project_X/shared_files_dir/ は shared_remote_branch からの変更で更新しません。

アイデアをいただければ幸いです。サブツリーを 1 つのブランチから 2 つの場所 (Project_X/shared_files_dir/) および (Project_Y/shared_files_dir/) にマージする方法、または他の方法でそれを作成する方法について

4

1 に答える 1

0

git1.8.2 以降、特定のブランチの最新のコミットに従ってサブモジュールを登録できます。

したがって、次のことができるため、サブツリーのアプローチよりもそのアプローチをお勧めします。

  • shared_files リポジトリの個別の履歴を維持する
  • ブランチの最後のコミットに簡単に更新

    git submodule update --remote
    

最新のブランチを追跡するために、既存のサブモジュールを変換することもできます。


OPはより簡単な解決策を選択しました:

回避策を使用することにしました:

  • 共有モジュールを別のリポジトリで管理し、
  • post-checkoutこれらの共有ファイルを共有リポジトリからメイン リポジトリにコピーするフックをメイン リポジトリに追加します。

私たちは小さなチームなので、このアプローチが最も簡単です

于 2013-10-27T10:25:07.187 に答える