0

我的任务是配置以下设置。

目前,我们有一个开源项目的内部规范回购。我们有一个 post-receive 挂钩,可以将任何更新推送到公开的远程存储库。

Joe Public 可以从公共回购中提取。

除了 post-receive 钩子,没有人推送到远程仓库

我们有很多用户在内部处理代码,我真的不想弄乱他们已经在工作的工作流程。

内部用户从内部规范 repo 中检查代码并提交相同的代码。

外部开发人员必须提交补丁,然后内部用户将为他们提交(审查后)。

此时,我们要开始允许一些外部开发人员对存储库进行提交访问。

这意味着使远程回购规范。

这也意味着改变用户的工作流程。除非这里的集体可以提出我在 git 方面缺少的东西。

当前工作流程的快速图表。

内部用户。

从内部仓库克隆。-> 带代码的猴子 -> 推送到内部仓库 -> 接收后挂钩推送到远程仓库。

外部用户。

从外部仓库克隆。-> 带代码的猴子 -> 通过邮件列表提交补丁 -> 内部用户将代码推送到内部仓库 -> 接收后挂钩推送到远程仓库。

理想的新工作流程!

内部用户。

从内部仓库克隆。-> 在提供克隆之前,pre-receive hook 确保我们有一个来自远程的更新镜像 -> monkey with code -> push to internal repo -> pre-receive hook 代理提交到远程 repo 并同步 2.

外部用户。

从远程仓库克隆。-> 带代码的猴子 -> 推送到远程仓库。

这有点像多主设置。您可以将代码推送到任一存储库并从任一存储库中提取代码。

其他一些注意事项。

内部仓库可以从远程仓库推送和拉取。远程仓库无法访问内部仓库。

你怎么看?

4

2 回答 2

0

这会有点令人讨厌,并且有一些工具旨在做到这一点——但它们通过“锁定”所有存储库来工作,只要有人对其中的任何一个进行更改。在你的情况下,我认为有一个更简单的方法。

  1. 每个人都推送到远程存储库,期间。内部用户和外部用户。

  2. 一个 cron 作业从远程存储库拉到内部存储库。

假设远程存储库位于ssh://remote/dir/proj.git,内部存储库位于ssh://internal/someplace/proj.git。添加到每个人的.gitconfig

[url "ssh://remote/dir/"]
    pushInsteadOf = "ssh://internal/someplace/"

这意味着克隆内部存储库的任何人仍然可以获得从附近服务器拉取的不错速度,但每个人都推送到同一个远程存储库。一旦在每个人的工作站上以.gitconfig这种方式设置,您只需要和--没有额外的标志,不需要配置东西。clonepushpull

请注意,像这样的设置唯一真正的好处是从内部存储库获取时获得的额外速度。有一个惩罚,因为 cron 作业的粒度控制了内部用户获取更改的速度——但我真的希望你没有一堆猴子在同一个分支上打字。

挂钩注意事项

从存储库获取时,Git 中不会触发任何钩子。如果你想做这种你拉来响应的事情git fetch,你可以git upload-pack用一个包装脚本替换 ,该脚本在调用 real 之前同步两个存储库git upload-pack

于 2012-11-06T01:24:53.887 回答
0

我处于非常相似的情况 - 我计划的方法是尝试配置本地存储库以执行从远程拉取的预接收挂钩(自动接受本地合并冲突)和后接收推送到远程仓库的钩子。此外,我计划设置一个 cron 作业,每 5 分钟左右从远程拉到本地,同时自动接受本地合并(因为我无法从远程推送 -> 本地)

通过这种方式,远程用户可以推拉他们的存储库,但本地存储库充当“主”,本地用户使用本地存储库。我认为自动冲突解决方案存在很多潜在问题。由于我们的 CI 设置为在有提交时每 15 分钟进行一次构建 - 问题会很快被发现。现在,如何连接所有这些...我明天开始...

于 2013-06-19T14:37:18.737 回答