git://プロトコルは会社によってブロックされていますが、どうすれば回避できますか?


188

次のような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://プロトコルを使用しようとして失敗しています。そのコマンドがどのように機能するかを変更する方法はありますか?


SSHアクセスはできますか?または単にHTTP?
Pablo Santa Cruz

56
gitの質問を閉じようとする人にとってそれは何ですか?FAQによれば、SOの範囲には「プログラマーが一般的に使用するソフトウェアツール」が含まれます。ここには6,000を超えるgitの質問があります。彼らはここに属しています。
カスカベル

9
あなたは、Gitが自動的にHTTPSを使用して取得することができます://それはgitの見ている時はいつでも:// URLを:git config --global url.https://.insteadOf git://
WildlyInaccurate

回答:


426

これがgit:プロトコルポート(9418)をブロックするファイアウォールの問題である場合は、より永続的な変更を行う必要があります。これにより、すべてのgitリポジトリに対して他の投稿で提案されているコマンドを発行する必要がないようにする必要があります。

以下の解決策は、git:プロトコルを使用している可能性のあるサブモジュールでも機能します。

gitメッセージは実際にはファイアウォールのブロックポート9418を直接指していないため、これを実際の問題として診断してみましょう。

問題の診断

参考文献:https://superuser.com/q/621870/203918https://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はを使用してURLを書き換える方法を提供しますgit config。次のコマンドを発行するだけです。

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

今、まるで魔法のように、すべてのgitコマンドはgit://toの置換を実行しますhttps://

このコマンドによって何が変更されましたか?

以下を使用して、グローバル構成を確認します。

git config --list

出力に次の行が表示されます。

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

~/.gitconfig次の2行が追加されたことを確認できるはずの場所をのぞくと、これがファイルでどのように見えるかを確認できます。

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

より細かく制御したいですか?

代わりに、より完全で特定のURLを使用してください。たとえば、GitHubのURLでのみgit://ではなくhttps://を使用するには、次のようにします。

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

異なる置換を使用して、このコマンドを複数回実行できます。ただし、URLが複数の置換に一致する場合、最長一致が「勝ち」ます。URLごとに1つの置換のみが行われます。

システム管理者向けのシステム全体の変更

あなたがLinuxシステム管理者であり、ユーザーに上記の苦労を強いられることを望まない場合は、システム全体のgit設定をすばやく変更できます。

次のコンテンツを編集または追加するだけで/etc/gitconfig、ユーザーは上記のいずれも心配する必要はありません。

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

9
見事なシンプルさ!
ランスハント、

よく働く!検索と置換は不要です。ビルドスクリプトは今すぐ機能します。この答えは私に多くの時間を節約しました。ありがとう!
ジェレミーベル

7
変換するURLをもう少し制御するために、URLの一部を指定することもできます。たとえば、SSH(gitlab)を介してgit reposをホストし、HTTPSはホストしないプライベート内部サーバー 'myserver.lan.example.com'があります。したがって、便利なキー認証を利用したい場合、SSHを使用する必要があります。私はGithubからのリポジトリも使用していますが、社内ファイアウォールがGithubへのSSHをブロックしています。'git://'のすべてのインスタンスを 'https://'に単純に置き換えたくないので、gitlabが壊れてしまいます。解決策はgit config --global url."https://github".insteadOf git://githubです。
clayzermk1

2
私はcygwinの内部からgitを実行していて、これを機能させる唯一の方法は、「システム管理者向けのシステム全体の変更」を実行し、「url.https://.insteadof=git://」に変更を追加することでした「C:\ Program Files(x86)\ Git \ etc \ gitconfig」ファイル。ヒントをありがとう!
Craig、

3
この変更を元に戻すにはgit config --global --unset url."https://".insteadOf
djskinner '25

29

Githubはhttp(s)アクセスも提供しますが、会社によってブロックされる可能性ははるかに低くなります。これを使用するようサブモジュールに指示するには、次のようにします。

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

これが実際にinitとupdateが別々のコマンドである理由です-あなたは初期化し、場所をカスタマイズしてから更新することができます。update --initURLをカスタマイズする必要がない場合のショートカットです。

これに遭遇した他の誰にとっても、もちろんssh URLを使用することもできます(会社がgit://をブロックしているがsshをブロックしていない場合)が、この場合、おそらくOPはリモートリポジトリへのSSHアクセスを持ちません。


このように聞こえるのはおそらく私にとってはうまくいきますが、それぞれを個別に検討する必要があるようです。特に問題がある場合は、github.com / ajaxorg / cloud9を実行していました
ロバート

4
@Robert:たくさんある場合は、構成ファイルを直接編集して、検索と置換を行うことができますsed -i 's@git://github@https://github@' .git/config
Cascabel

うーん、何らかの理由でファイルでhttp://と言いますが、コマンドはまだgit://を試みます
Robert

1
OPで説明されているのと同じ問題が発生していますが、この解決策を使用すると失敗しますが、少し異なるエラーが発生します。「エラー:https:// ...のアクセス中に致命的:HTTPリクエストが失敗しました」と書かれています。ホストが何かをブロックしていますか?他のサブモジュールは正常に更新されますが、問題があるのは1つだけです。
Jo Sprague

13

git configの変更を伴わない別のオプションは、通常の22ポートの代わりにポート443を使用するようにssh設定を変更することです。

リファレンス:HTTPSポートを介したSSHの使用

その記事から:

edit the file at ~/.ssh/config, and add this section:

Host github.com
   Hostname ssh.github.com   
   Port 443

その後、Githubへのgit pushに成功しました。自宅では、必要に応じてssh構成を元の状態に戻すことができます。


7

私もしばらく同じ問題を抱えていました。次に、提案されたコマンドを使用してgit configを変更してみました。

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://代わりにを使用してリモートURLを設定した後git@git.com、問題は解決しました。


1
同様の問題が発生しました。グローバルの設定は、今後複製​​されるリポジトリにのみ影響し、遡及的に変更されることはないようです。
テイラーエドミストン2016年

2

上記のネイサンの答えを拡張して、企業のファイアウォールがhttpsを妨害している場合は、sshプロトコルを試すこともできます。私の場合、ファイアウォールがgitプロトコルをブロックし、httpsのssl証明書を再発行していたため、strict-sslオプションをオフにしても、問題が発生していました。githubで説明されているように、sshに対して同様のURL書き換えを行い、sshキー/ペア作成できます。

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

また、gitインストールのためにssh-agentオンにする必要があります


1

これは、ノードサーバーのGITアドレスが変更されたためです。今すぐ入力する必要があります。

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

幸運を


6
この質問は、上記が有効なURLであった2月からの質問です。
Robert

@calccryptoリンクはコードタグの付いていないコマンドの一部であり、情報へのリンクではありません。
Mike Precup 2014

0

前書き

ここに私自身のアプローチを追加します(httpsをサポートする公的にアクセス可能なgitリポジトリがある場合は必要ありません)。

私はgitリポジトリに社内からのみアクセスできる会社で働いています。しかし、私も自宅で仕事をしています。

自宅から会社のリポジトリにプッシュするにはどうすればよいですか?

私のグーグルドライブにフォルダを含むリポジトリを作成しました。gitとhttpsを除き、パスとしてリポジトリを含めることができます。

ここに画像の説明を入力してください

したがって、オリジンにプッシュする代わりに、「gDrive」にプッシュします。これにより、フォルダーが自宅のワークステーションからGoogleドライブに同期され、仕事用のコンピューターが変更をプルします。さらに、「。git」ディレクトリ内のファイルが同期しない場合があるため、一時的にフォルダの名前を「trunk」から「trunk2」などに変更します。これにより、自宅と職場の両方のコンピューターがGoogleドライブと100%同期されます。

次に、checkpoint-vpn remote(またはteamviewer)を介して仕事用コンピューターにログオンし、更新を仕事用gitリポジトリにプッシュします。

さらに、このプロセスは、ブロックされている社外のgitリポジトリにpushする場合も逆に機能します。

  1. ワークステーションのgit repoからGoogleドライブのフォルダーにプッシュします。
  2. gDriveのプロジェクトディレクトリの名前を一時的に変更して、100%の同期を強制します。
  3. ある種のリモートを通じて自宅のコンピューターにアクセスし、変更をプッシュします。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.