リポジトリのGithubページにある[Clone or download]ボタンは、リポジトリのURLを提供します。そのURLをWebブラウザで使用すると、ブラウザに表示されるHTMLページが表示されます。同じページがウェブスパイダーによっても受信されます。
ただし、GitクライアントにURLを提供すると、リポジトリファイル(リポジトリをクローン、プル、プッシュ)で操作できます。これはGitクライアントがHTTP上に構築されたGit's own protocolsのうちの1つを使用するためです。
このプロトコルを使用するために、Gitクライアントは、リポジトリのベースURLに基づいてURLを作成し、このURLでHTTPリクエストを送信します。 GitのURLがhttps://github.com/axiac/code-golf.git
、Gitのクライアントがリポジトリの内部構造についての詳細な情報を見つけるために、以下の2つの要求のいずれかをしようとしている場合
は、たとえば、:
GET https://github.com/axiac/code-golf.git/info/refs HTTP/1.0
GET https://github.com/axiac/code-golf.git/info/refs?service=git-upload-pack HTTP/1.0
最初のものが呼び出されます"ダム"プロトコル(これはGithubではもうサポートされていません)、もう1つは "スマート"プロトコルと呼ばれます。 "ダム"はテキストメッセージで動作し、 "スマート"はバイナリ文字列ブロックとカスタムHTTPヘッダーで動作します。
Gitリポジトリを操作するには、Gitクライアントはサーバから受信した応答を解析し、その情報を使用して、意図した動作の正しい要求を作成して送信する必要があります。
ブラウザはGitリポジトリでプロトコルを認識できないため動作できません。万能ウェブクローラーは、ブラウザのように多かれ少なかれ機能します。通常、スタイルやスクリプト、HTMLの正しさはあまり気にしませんが、HTTPに関してはブラウザとよく似ています。
レポをクローンするには、Gitトランスポートプロトコルを理解するためにWebクローラーを特別にプログラミングする必要があります。あるいは、(より良い)GitリポジトリのURLだと思うURLを見つけたら、外部のgit clone
コマンドを実行することができます。どちらの場合でも、クローラはGitリポジトリをクローンするというこの目的を念頭に置いてプログラムする必要があります。
まるで、Webクローラー(またはWebブラウザーを使用しているユーザー)が間違ってGitリポジトリーをクローンにすることはできません。
Webクローラーは、GitリポジトリをGitリポジトリから、またはGitリポジトリを提供する他のWebサーバーから複製する必要さえありません。リポジトリに含まれるすべてのファイルのすべてのバージョンを取得するには、(Githubまたは他の)Webサーバーが提供するリンクを使用します。
ありがとうございました。私はあなたの議論が理にかなっていると思うので、おそらくGitHubのクローン統計は誤解を招くかもしれません。おそらく、彼らは単に "クローン"を数え、リンクをたどってマスターブランチのジップをダウンロードするだけです。これは実際にはクローラによって何かが行われる可能性があります。 – Sean