2016-11-12 92 views
3

我在GitHub上託管了一些公共存儲庫,它偶爾會根據流量圖接收克隆。雖然我想相信很多人都在查找我的代碼並下載它,但其中一些代碼的性質使我懷疑這些克隆中的大多數來自殭屍程序或搜索引擎爬蟲/蜘蛛。我知道如果我通過搜索引擎找到git存儲庫,我通常會用瀏覽器查看代碼,然後在克隆它之前確定它是否有用。機器人/蜘蛛是否克隆公共git存儲庫?

有誰知道克隆git repositories是否是搜索引擎抓取工具的標準技術,或者如果我的代碼比我想象的更流行?

回答

1

存儲庫的Github頁面中的「克隆或下載」按鈕提供存儲庫的URL。如果您通過網頁瀏覽器使用該網址,您將獲得可在瀏覽器中看到的HTML頁面。網頁蜘蛛也收到相同的頁面。但是,如果您將URL提供給Git客戶端,則它可以對存儲庫文件進行操作(克隆repo,pull,push)。這是因爲Git客戶端使用在HTTP之上構建的兩個Git's own protocols中的一個。

爲了使用這些協議,Git客戶端根據存儲庫的基本URL構建URL並在這些URL上提交HTTP請求。

例如,如果Git的URL是https://github.com/axiac/code-golf.git,一個Git客戶端嘗試,以便找到有關存儲庫的內部結構的詳細信息如下兩個要求之一:

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支持),第二種被稱爲「智能」協議。 「愚蠢的」一個與文本消息一起使用,「聰明的」一個與二進制字符串塊和自定義HTTP標頭一起使用。

爲了在一個Git倉庫操作,Git的客戶端必須解析從服務器接收的響應,並利用這些信息來創建和提交打算採取的行動正確的請求。

瀏覽器無法在Git存儲庫上操作,因爲它不知道協議。一個通用的網絡爬蟲程序,或多或少的,就像一個瀏覽器。它通常不會太在意樣式和腳本以及HTML的正確性,但對於HTTP而言,它與瀏覽器非常相似。

爲了克隆你的回購站,一個網絡爬蟲必須被專門編程來理解Git傳輸協議。或者(更好)它可以運行一個外部git clone命令,當它發現一個它認爲是Git存儲庫的URL的URL。在這兩種情況下,抓取程序都必須考慮到這一目的進行編程:克隆Git存儲庫。

總而言之,沒有辦法一個網絡爬蟲(或使用網頁瀏覽器的用戶)可以通過錯克隆一個Git倉庫。

網絡爬蟲甚至不需要從Github或從其他服務於Git存儲庫的Web服務器克隆Git存儲庫。它可以通過使用(Github或其他)Web服務器提供的鏈接來獲取存儲庫中包含的所有文件的每個版本。

+0

謝謝。我認爲你的觀點是有道理的,所以也許GitHub的克隆統計數據是有誤導性的。也許他們把一個「克隆」作爲一個簡單的鏈接來下載master分支的zip文件,這確實可以由爬蟲完成。 – Sean