2

考虑以下场景:

Remote repo A (master):
  dir 1
  dir 2
  file 1
  file 2

Remote repo B (branch):
  dir 1
  file 1

我想做的是使两个存储库中的公共文件保持同步。当我拉取时Repo B,我想从. 同样,当我推送时,我希望本地更改仅发布到两个存储库中的公共文件。存储库 A 中存在但存储库 B 中不存在的文件应保持不受影响。Repo A

Git 支持这个吗?

4

2 回答 2

1

经过数小时的研究,我决定使用 git subtree 合并。不是git subtree,这是一个 git contrib 工具(谈论行话重载),而是策略Git - Subtree Merging。我的决定背后的原因如下:

  1. 网络上充满了反对使用 git 子模块的警告。更重要的是,对我来说,绝对有必要在两个存储库中保留公共文件的物理副本,而不仅仅是指向远程存储库的指针。我还希望能够从子模块不提供的主树或子树更新代码。所以 git submodule 出来了。

  2. git subtree 工具看起来不错,有很多关注者,但仔细观察,它似乎与子树合并策略非常相似(实际上,有人说它是一个很好的子树合并装饰器)。它有一些额外的功能,比如在合并时压缩子树历史的能力,但这是以学习一种新的推送代码方法为代价的。另外,它还不是标准 git 二进制文件的一部分(Mac 上的 Git 10.8.4.2,预构建二进制文件),我不想每次发布错误修复时都手动安装升级。

感谢那些花时间回答我问题的人,特别是@dekdev,他们也试图在聊天中帮助我。

于 2013-11-09T00:06:31.903 回答
0

这些是不同的团队。
的用户B不需要访问我的 repo C,如果我制作子模块,他们将需要它。
同样, 的用户不A应该有权访问B.
代码在两个单独的存储库中共享的事实需要对存储库的当前用户透明。他们可以处理各自的存储库,但不能同时处理两者。

然后你需要某种自动钩子:

  • 每次提交AB检查哪些是公共文件
  • 将这些公共文件的更新相应地推送到其他存储库

这假设:

  • 您可以访问AB服务器(在哪里TeamATeamB正在推送)
  • 你可以在那里部署一个post-receive钩子
  • 该钩子可以推送到另一个 repo 服务器(如果我们谈论的是同一台服务器,这可能很容易)。

注意:为了保护对 repos(甚至是 repo 中的文件)的访问,像gitolite这样的授权层可以提供帮助。

于 2013-11-08T06:58:04.070 回答