git://协议被公司阻止,我怎么能解决这个问题?

尝试类似git clone git://github.com/ry/node.git将不起作用,它会导致:

 Initialized empty Git repository in /home/robert/node/.git/ github.com[0: 207.97.227.239]: errno=Connection timed out fatal: unable to connect a socket (Connection timed out) 

但是,通过HTTP克隆工作正常。 到目前为止,我已经知道这是协议的问题,但我正在尝试安装需要命令的cloud9

git submodule update --init --recursive

这是试图使用git://协议和失败。 有没有办法改变命令的工作方式?

如果这是你的防火墙阻塞git:protocol port(9418)的问题,那么你应该做一个更持久的改变,所以你不必记得为每个git repo发布其他postbuild议的命令。

下面的解决scheme也适用于也可能使用git:协议的子模块。

由于git消息并没有真正指向防火墙阻塞端口9418,所以让我们尝试诊断这是实际的问题。

诊断问题

参考文献: https : //superuser.com/q/621870/203918和https://unix.stackexchange.com/q/11756/57414

有几种工具可以用来确定防火墙是否会导致我们的问题 – 使用哪个安装在您的系统上。

 # Using nmap # A state of "filtered" against port 9418 (git) means # that traffic is being filtered by a firewall $ nmap github.com -p http,git Starting Nmap 5.21 ( http://nmap.org ) at 2015-01-21 10:55 ACDT Nmap scan report for github.com (192.30.252.131) Host is up (0.24s latency). PORT STATE SERVICE 80/tcp open http 9418/tcp filtered git # Using Netcat: # Returns 0 if the git protocol port IS NOT blocked # Returns 1 if the git protocol port IS blocked $ nc github.com 9418 < /dev/null; echo $? 1 # Using CURL # Returns an exit code of (7) if the git protocol port IS blocked # Returns no output if the git protocol port IS NOT blocked $ curl http://github.com:9418 curl: (7) couldn't connect to host 

好的,现在我们已经确定它是我们的git端口被防火墙阻止了,我们能做些什么呢? 阅读:)

基本的URL重写

Git提供了一种使用git config重写URL的方法。 只需发出以下命令:

 git config --global url."https://".insteadOf git:// 

现在,就像魔术一样,所有的git命令都会执行git://replace为https://

这个命令做了什么改变?

看看你的全局configuration使用:

 git config --list 

您将在输出中看到以下行:

 url.https://.insteadof=git:// 

你可以通过查看~/.gitconfig查看文件的外观,现在你应该看到添加了以下两行:

 [url "https://"] insteadOf = git:// 

想要更多的控制?

只需在更换中使用更完整/特定的url即可。 例如,要让GitHub URL使用https://而不是git://,则可以使用如下所示的内容:

 git config --global url."https://github".insteadOf git://github 

您可以使用不同的replace多次运行此命令。 但是,如果某个url匹配多个replace项,则最长匹配项为“胜出”。 每个URL只能replace一个。

系统pipe理员的系统范围更改

如果你是一个Linux系统pipe理员,并且你不希望你的用户必须经历上述的痛苦,你可以做一个快速的系统范围的gitconfiguration改变。

只需编辑或添加以下内容到/etc/gitconfig和瞧你的用户不必担心任何上述:

 [url "https://"] insteadOf = git:// 

Github也提供了http访问权限,而这种访问不太可能被公司阻止。 要告诉子模块使用它,你可以这样做:

 git submodule init git config submodule.<name>.url https://github.com/... git submodule update 

这实际上正是为什么init和update是单独的命令 – 你可以初始化,自定义位置,然后更新。 update --init只是一个快捷方式,当你不需要自定义任何url。

对于任何其他发生这种情况的人,你当然也可以使用ssh URL(如果你的公司阻止了git://而不是ssh),但是在这种情况下,OP大概没有SSH访问远程仓库的权限。

另一个不涉及git config的选项是将ssh设置改为使用端口443而不是常规的22端口。

参考: 通过HTTPS端口使用SSH

从那篇文章:

 edit the file at ~/.ssh/config, and add this section: Host github.com Hostname ssh.github.com Port 443 

之后,我能够成功地推动Github。 在家里,如果你想要的话,你可以把sshconfiguration改回原来的样子。

我也有一段时间同样的问题。 然后我尝试使用build议的命令更改gitconfiguration:

 git config --global url."https://".insteadOf git:// 

这不幸的是没有为我做的伎俩 。 我仍然有同样的问题!

实际上最终解决了我的问题的是,我使用以下命令重新设置了存储库的远程URL:

 git remote set-url origin https://github.com/<my_user_name>/<my_repo_name>.git 

以前是这样的:

 git remote set-url origin git@github.com:<my_user_name>/<my_repo_name>.git 

使用https://而不是git@git.com设置远程URL之后,问题就解决了。

在Nathan的回答上面扩展,如果您的企业防火墙干扰https,您也可以尝试ssh协议。 在我的情况下,防火墙阻止了git协议,为https重新颁发ssl证书,即使在closures了strict-ssl选项的情况下,这也是对我的打击。 你可以做一个类似的URL重写为SSH,并创build一个SSH密钥/对github上描述 。

  git config --global url."ssh://git@github.com".insteadOf git://github.com 

你也必须打开你的git安装的ssh-agent 。

这是因为节点服务器的GIT地址已经改变了,你现在必须input:

git clone https://github.com/joyent/node

祝你好运

介绍

我将在这里添加我自己的方法( 如果您有可公开访问的支持https的git存储库,则不需要 )。

我在一个只能从公司内部访问git仓库的公司工作。 但我也在家工作。

我如何从家里推送到公司存储库?

我创build了一个存储库,在我的谷歌驱动器上有一个文件夹。 除git和https之外,您可以将存储库包含为path。

在这里输入图像说明

所以,而不是推到原点,我推到“gDrive”。 这导致文件夹从我的家庭工作站同步到谷歌驱动器,然后我的工作计算机拉动更改。 此外,由于有时“.git”目录中的文件不同步,因此我暂时将文件夹从“trunk”重新命名为“trunk2”。 这迫使家庭和工作电脑100%与谷歌驱动器同步。

然后,我通过checkpoint-vpn remote(或teamviewer)login到我的工作计算机,并将我的更新推送到工作git存储库。

此外,该stream程反过来也可以推送到被阻止的公司之外的git仓库。

  1. 从工作站git回购推到谷歌驱动器中的文件夹。
  2. 临时重命名gDrive中的项目目录,强制100%同步。
  3. 通过某种远程访问家庭计算机并推送更改。