我对git很感兴趣。在过去的几十年里,我几乎使用了所有常用的玩家。目前在SVN上并不是很开心。
我认为我理解基础知识,但我不明白关于分布式性质的一个关键概念:他/她家中的用户如何与我的计算机(单独的房屋,ISP等)交谈,何时我们都有来自ISP的动态IP地址,并使用至少一级防火墙/ NAT来隐藏世界上的本地网络地址。
这并不是说有一个有用的DNS条目指向其他主机/ PC /笔记本电脑。而且大多数(所有?)互联网服务提供商都没有明确表示你如何打开端口(当然,我可以在我的房子里做这件事,但是当我在酒店房间时呢?)
任何指向此常见问题解答答案的指针都非常感谢。
答案 0 :(得分:2)
这本身并不是一个问题。如果您在笔记本电脑上托管Subversion存储库,其他开发人员在您入住酒店房间时仍然无法与之交谈。您需要通过隧道传输其他协议或将其推送到可相互访问的资源来使您的存储库可用。
最糟糕但仍然可操作的情况是,当repos无法直接相互通信时,您可以使用git send-email
通过电子邮件发送补丁。
接下来,您可以说自己拥有一个提供~/public_html
互联网提供商的shell帐户。在这种情况下,您将在该网站空间中创建一个裸存储库,如Setting up a git repository which can be pushed into and pulled from over HTTP(S)中所述。您的推送将通过SSH进行身份验证,您的协作者将设置遥控器以从适当的HTTP URL提取。
这比电子邮件略胜一筹,但速度慢而且笨拙。现在git有一个smart HTTP backend的好处,其中拉取HTTP的速度要快得多。使用智能或愚蠢的后端,您可以启用身份验证。
如果您不关心身份验证,您还可以使用git daemon
从每个人都可以访问的主机为您的存储库提供服务。
如果您都拥有对同一主机的shell访问权限,则可以在连接到该框后直接进行工作。你有很多选择:
git pull
答案 1 :(得分:1)
您使用正常的传出HTTPS请求与中央服务器(例如GitHub)通信。
答案 2 :(得分: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
box two(client):virtual 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 ...
提交服务器答案 3 :(得分:0)
三种解决方案:
答案 4 :(得分:0)
我认为你们不是在同一个本地私人网络上,是吗?
您可以尝试设置SSH隧道,并通过SSH推送/获取。您可以将ssh配置为使用非标准端口,并将其导出到路由器上。您可以使用免费的动态DNS服务之一,例如DynDNS。
你们每个人都可以在public Git hosting sites GitHub之一设置免费帐户,在你准备就绪时推送你的更改,另一个人从其他公共存储库获取更改:这不会需要在路由器/ NAT中的防火墙/导出端口上打孔。
图片看起来与Chapter 5.1 "Distributed Workflows" Pro Git书中的这个数字相似,只是没有受祝福的存储库和集成管理器的位置,开发人员直接从彼此的公共存储库中获取:
lieutenant-diagram http://progit.org/figures/ch5/18333fig0502-tn.png
如果所有其他方法都失败了,您可以随时使用任何渠道交换git bundle:无论是电子邮件附件还是USB磁盘。