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

仅使用来自 shared_remote_branch 的更改更新 Project_Y/shared_files_dir/,而不是 Project_X/shared_files_dir/。

我会很感激任何想法。关于如何将子树从一个分支合并到 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 回答