3

我对 git 很感兴趣。在过去的几十年里,我几乎使用了所有常用的播放器。目前在 SVN 上并不太高兴。

我想我了解基础知识,但我不了解有关分布式性质的一个关键概念:当我们都有时,他/她家中的用户如何与我的计算机(单独的房子、ISP 等)交谈来自我们的 ISP 的动态 IP 地址,并使用至少一层防火墙/NAT 来隐藏本地网络地址。

好像没有一个有用的 DNS 条目指向其他主机/PC/笔记本电脑。而且大多数(全部?)ISP 并没有明确说明您通常如何打开端口(当然,我可以在家里做,但是当我在酒店房间时呢?)

任何指向此常见问题解答答案的指针都非常感谢。

4

5 回答 5

2

这本身不是一个 git 问题。例如,如果您在笔记本电脑上托管了一个 Subversion 存储库,那么当您在酒店房间时,其他开发人员仍然无法与之交谈。您需要通过其他协议的隧道或将它们推送到可相互访问的资源来使您的存储库可用。

最糟糕但仍可操作的情况是当 repos 无法直接相互通信,但您可以使用git send-email.

接下来,假设您有一个互联网提供商的空壳账户,该提供商也提供~/public_html. 在这种情况下,您将在该网络空间中创建一个裸存储库,如设置 git 存储库中所述,该存储库可以通过 HTTP(S) 推入和拉出。您的推送将通过 SSH 进行身份验证,并且您的协作者将设置远程以从适当的 HTTP URL 中提取。

这比电子邮件稍微好一点,但速度慢而且笨拙。现在 git 具有智能 HTTP 后端的好处,其中通过 HTTP 拉取的速度要快得多。使用智能或哑后端,您可以启用身份验证。

如果您不关心身份验证,您还可以使用git daemon每个人都可以访问的主机为您的存储库提供服务。

如果你们都拥有对同一主机的 shell 访问权限,则可以在连接到该机器后直接交换工作。您在这里有很多选择:

  • 完整的外壳访问:相同的帐户,相同的(集中式)回购
  • 完整的外壳访问:不同的帐户,单独的回购,git pull
  • 允许协作者仅 git 访问您的 shell 帐户
  • (等等)

以上可能会在紧要关头,但所有的手动护理和喂养都会变得乏味。将令人头疼的问题外包给GitHubGitorious

于 2010-07-12T03:32:00.653 回答
1

你们都使用正常的传出 HTTPS 请求与中央服务器(例如 GitHub)通信。

于 2010-07-12T01:26:15.510 回答
0

我假设你们不在同一个本地专用网络上,是吗?

您可以尝试设置 SSH 隧道,并通过 SSH 推送/获取。您可以将 ssh 配置为使用非标准端口,并将其导出到您的路由器上。您可以使用一种免费的动态 DNS 服务,例如DynDNS

你们每个人都可以在一个公共 Git 托管站点(如GitHub )上设置免费帐户,准备好后将更改推送到它,另一个将从其他公共存储库获取更改:这不需要在防火墙上打任何洞/ 导出路由器/NAT 中的端口。

图片看起来类似于Pro Git书的第 5.1 章“分布式工作流”中的这个图,只是没有受祝福的存储库和集成经理职位,并且开发人员直接从彼此的公共存储库中获取:

中尉图 http://progit.org/figures/ch5/18333fig0502-tn.png


如果一切都失败了,您可以随时使用任何渠道交换git bundle:无论是电子邮件附件还是 USB 磁盘。

于 2010-07-12T07:27:49.627 回答
0

在...之间建立一个独立的openvpn隧道

示例(无加密):

框一(服务器):虚拟IP 10.10.11.5

openvpn --float  --ping 30 --ping-exit 300 --inactive 300 --mssfix 1400 --tun-mtu 1500 --mute-replay-warnings --dev tun --comp-lzo --port 3565 --ifconfig 10.10.11.5 10.10.11.6  --proto tcp-server

框二(客户端):虚拟ip 10.10.11.6

openvpn --remote dynamic_ip_of_server_or_no_ip_hostname --float  --ping 30 --ping-exit 300 --inactive 300 --mssfix 1400 --tun-mtu 1500 --mute-replay-warnings --dev tun --comp-lzo --port 3565 --ifconfig 10.10.11.6 10.10.11.5  --proto tcp-client

然后,通过 ssh ... 或 smbmount 或 NFS mount 提交到服务器...

于 2010-07-12T01:38:04.953 回答
0

三个解决方案:

  • 中央服务器(例如 github)
  • VPN
  • IPv6(teredo/miredo 非常适合家庭设置)+ dynDNS(很少有免费的 dynDNS AAAA 记录,我发现的唯一一个是 majimoto.net)
于 2010-07-12T01:43:42.007 回答