Git服务器和用户之间的复制服务

时间:2014-07-01 16:47:11

标签: git version-control

我正在开发一个项目,将Git用作新的SCM解决方案。我理解Git的一些原则,但我对这项技术几乎没有经验。

为了减少网络流量,在Lan中拥有远程存储库的单个副本似乎是合理的,而不是每次开发人员需要访问新的东西时都会离开网络。

因此我想知道Git是否有任何可以作为开发人员和Git中心实例之间的“外观”服务器或复制服务的中介服务。

问题

  1. Git有这种功能吗?是否有附加组件可以做到这一点?
  2. 如果存在这样的功能,使用它有哪些常见的缺陷?
  3. 您对添加这一层复杂性有何看法?这是个好主意吗?
  4. 如果Git不支持开箱即用,还有哪些其他选择可以实现这一目标?
  5. 下图有助于说明我的观点。 “假设Git复制”是复制服务的名称,我不知道它是否存在。

    enter image description here

    如果需要更多信息,请询问我是否可以正确更新我的问题。

3 个答案:

答案 0 :(得分:4)

是的,确实如此,或者说有一个系统可以做到这一点:GerritGerrit replication plugin

如果您的局域网包含Gerrit管理的仓库,那么该仓库可以复制到一个或多个远程仓库。

我了解该特定插件的原因是因为Episode 30 of GitMinutes,详细说明了[in]famous force push of 186 Jenkins repositories to GitHub(请参阅" Use the force, Lucas")。

当时(2013年11月),该插件的默认值为强制推送(git push --f)。这真的不安全;)

答案 1 :(得分:1)

我确定你可以一起破解这些东西,但我认为它不会给你带来的好处:

  • 如果您允许团队成员推送到内部复制框而不强制从远程实例更新复制框,则会冒复制框和远程复选框不同步的风险。

    如果复制框和远程控制台不同步,您将面临手动解决这两个框之间的合并冲突的任务。这是令人不愉快的,可能导致历史混乱。

  • 如果您每次团队成员尝试pushfetch时强制复制框从远程框更新,您将产生的网络流量几乎与您一样多将没有复制框。

  • 干净利落的唯一方法是,只能从内部复制实例更新远程实例。但在这种情况下,内部复制实例是真正的中央存储库,而外部复制实例只是一个只读镜像。

    如果您只想将外部实例用作只读镜像或非现场备份,则还有其他方法可能更好。

Git的网络流量通常非常高效。面对更多流量或更复杂的选择,我可以随时获得更多流量。

答案 2 :(得分:1)

我认为您可以将LAN上的服务器用作git存储库。 首先,您必须使用以下命令初始化您的存储库:

git init --bare

--bare向git-daemon表明它有权克隆此本地存储库。或者,如果您已经有另一个代表的项目:

git clone --bare my_project my_project.git

现在任何对您的服务器具有读访问权限的人(通过ssh或Windows文件共享系统)都可以从您的存储库中克隆和提取。如果他们有写入权限,他们就可以推送。

在linux中,命令将如下所示:

git clone user@myserver.example.com:/path_to_the_project/my_project.git

现在,如果您希望在云中偶尔推送一个额外的存储库,您仍然可以执行此操作。您将自己连接到本地服务器并执行以下操作:

git push http://github.com/my_organisation/my_project

通过这种方式,您可以拥有一个本地存储库,人们可以根据自己的权限进行拉取或推送,并且您有一个外部存储库,您必须手动更新。

有关详细信息,请查看the official doc.

我希望它能回答你的问题,你看起来有点模糊。