1. ホーム
  2. git

[解決済み] git:// プロトコルは会社によってブロックされています。

2022-04-13 11:18:56

質問

次のようなことを試みます。 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: プロトコルのポート (9418) をブロックしていることが問題なら、もっと永続的な変更を行う必要があります。

また、以下の解決策は、git: protocol を使用している可能性のあるサブモジュールに対してのみ有効です。

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 では、URL を書き換えるために git config . 以下のコマンドを発行するだけです。

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

これで、まるで魔法のように、すべてのgitコマンドで git://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

このコマンドは、異なる置き換えを使用して複数回実行することができます。ただし、1つのURLが複数の置換に一致した場合、最も長く一致したものが優先されます(quot")。置換は1つのURLにつき1回だけ行われます。

シスアドのためのシステム全体の変更点

もしあなたがLinuxのシスアドで、ユーザーに上記のような苦労をさせたくないのであれば、システム全体のgitの設定を素早く変更することができます。

以下の内容を編集または追加して /etc/gitconfig これで、ユーザーは上記のような心配をする必要はありません。

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