[解決済み] 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: プロトコルのポート (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://
関連
-
[解決済み] Git で直近のローカルコミットを取り消すには?
-
[解決済み] Gitブランチをローカルやリモートで削除するには?
-
[解決済み] コミット前に 'git add' を取り消すにはどうすればよいですか?
-
[解決済み] リモートのGitブランチをチェックアウトするには?
-
[解決済み] Git リポジトリを以前のコミットに戻すにはどうすればよいですか?
-
[解決済み] 現在のGit作業ツリーからローカル(未追跡)ファイルを削除する方法
-
[解決済み] Git が追跡したファイルを .gitignore に登録したまま「忘れる」ようにするにはどうしたらいいですか?
-
[解決済み] ローカルの Git リポジトリが元々クローンされた URL を特定するにはどうすればよいですか。
-
[解決済み】"git pull" でローカルファイルを強制的に上書きするには?
-
[解決済み】ローカルのGitブランチの名前を変更するには?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 現在のブランチのトラッキング情報がありません。
-
[gitコミット失敗の解決] 現在のブランチの先端が後ろにあるため、更新が拒否されました。
-
git push reports an error ! [リモート拒否] master -> master (受信前のフックが拒否されました)
-
Gitのプッシュでエラーが発生! [リモート拒否] master -> master (pre-receive hook declined) error: failed to push some refs to .......
-
[解決済み] git: fatal: リモートリポジトリから読み取れませんでした。
-
[解決済み] git ls-remote と git ls-remote origin の違い。
-
[解決済み] GitBash | origin master - rejected (fetch first) | GitHub リポジトリにファイルがない。
-
[解決済み] Git エラー : 'upstream' は git リポジトリでないようです。
-
[解決済み] 警告: リモート HEAD は存在しない参照元を参照しているため、チェックアウトできません。
-
[解決済み] ssh: ホスト github.com ポート 22 に接続: 接続がタイムアウトしました。