考虑以下场景:
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 支持这个吗?
考虑以下场景:
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 支持这个吗?
经过数小时的研究,我决定使用 git subtree 合并。不是git subtree
,这是一个 git contrib 工具(谈论行话重载),而是策略Git - Subtree Merging。我的决定背后的原因如下:
网络上充满了反对使用 git 子模块的警告。更重要的是,对我来说,绝对有必要在两个存储库中保留公共文件的物理副本,而不仅仅是指向远程存储库的指针。我还希望能够从子模块不提供的主树或子树更新代码。所以 git submodule 出来了。
git subtree 工具看起来不错,有很多关注者,但仔细观察,它似乎与子树合并策略非常相似(实际上,有人说它是一个很好的子树合并装饰器)。它有一些额外的功能,比如在合并时压缩子树历史的能力,但这是以学习一种新的推送代码方法为代价的。另外,它还不是标准 git 二进制文件的一部分(Mac 上的 Git 10.8.4.2,预构建二进制文件),我不想每次发布错误修复时都手动安装升级。
感谢那些花时间回答我问题的人,特别是@dekdev,他们也试图在聊天中帮助我。
这些是不同的团队。
的用户B
不需要访问我的 repoC
,如果我制作子模块,他们将需要它。
同样, 的用户不A
应该有权访问B
.
代码在两个单独的存储库中共享的事实需要对存储库的当前用户透明。他们可以处理各自的存储库,但不能同时处理两者。
然后你需要某种自动钩子:
A
或B
检查哪些是公共文件这假设:
A
和B
服务器(在哪里TeamA
和TeamB
正在推送)post-receive
钩子