考虑以下情况:
Remote repo A (master):
dir 1
dir 2
file 1
file 2
Remote repo B (branch):
dir 1
file 1
我想要做的是保持两个repos中的公共文件同步。当我提取时,我希望从Repo B
的公共文件中获得Repo A
和仅更改的所有更改。同样,当我推送时,我希望本地更改只发布到两个repos中的公共文件。存在于repo A但不存在于repo B中的文件应保持不受影响。
Git支持吗?
答案 0 :(得分:1)
经过数小时的研究,我决定采用git子树合并。不是git subtree
,这是一个git contrib工具(谈论行话重载)但是策略Git - Subtree Merging。我的决定背后的原因如下:
Web上充满了使用git子模块的警告。更重要的是,对我来说,绝对有必要在两个repos中保留公共文件的物理副本,而不仅仅是指向远程仓库的指针。我还希望能够更新子模块不提供的主要或子树的代码。所以git子模块就出来了。
git子树工具看起来不错,并且有很多粉丝,但经过仔细检查,它似乎与子树合并策略非常相似(事实上,有人说它是围绕子树合并的一个很好的装饰者)。它有一些额外的功能,比如在合并时压缩子树历史的能力,但这是以学习推送代码的新方法为代价的。另外,它还不是标准git二进制文件的一部分(Mac上的Git 10.8.4.2,预构建的二进制文件),并且每次发布错误修复时我都不想手动安装升级。
感谢那些花时间回答我的问题的人,特别是@dekdev,他也试图帮我聊聊。
答案 1 :(得分:0)
那些是独立的团队
B
的用户无需访问我的仓库C
,如果我制作子模块,他们就需要这样做。
同样,A
的用户也无权访问B
代码在两个单独的repos之间共享的事实需要对repos的当前用户透明。他们可以处理他们的个人回购,但不是两者兼而有之。
然后你需要某种自动钩子:
A
或B
上的每次提交检查常见文件是什么那假设:
A
和B
个服务器(其中TeamA
和TeamB
正在推送)post-receive
hook 注意:为了保护对repos(甚至是回购文件中的文件)的访问权限,以及 authorization layer 等gitolite可以提供帮助。