2015-05-14 50 views
0

對不起,如果這是顯而易見的,但我無法弄清楚這個鍵是什麼!Github API(V3)內容sha鍵

{ 
    "type": "file", 
    "encoding": "base64", 
    "size": 5362, 
    "name": "README.md", 
    "path": "README.md", 
    "content": "encoded content ...", 
    "sha": "3d21ec53a331a6f037a91c368710b99387d012c1", <<THIS KEY>> 
    "url": "https://api.github.com/repos/octokit/octokit.rb/contents/README.md", 
    "git_url": "https://api.github.com/repos/octokit/octokit.rb/git/blobs/3d21ec53a331a6f037a91c368710b99387d012c1", 
    "html_url": "https://github.com/octokit/octokit.rb/blob/master/README.md", 
    "download_url": "https://raw.githubusercontent.com/octokit/octokit.rb/master/README.md", 
    "_links": { 
    "git": "https://api.github.com/repos/octokit/octokit.rb/git/blobs/3d21ec53a331a6f037a91c368710b99387d012c1", 
    "self": "https://api.github.com/repos/octokit/octokit.rb/contents/README.md", 
    "html": "https://github.com/octokit/octokit.rb/blob/master/README.md" 
    } 
} 

我標記了密鑰<>以提供幫助。

https://developer.github.com/v3/repos/contents/#get-contents

+0

這可能是提交哈希? – maggick

+0

否則它可能是[sha算法](http://en.wikipedia.org/wiki/Secure_Hash_Algorithm)用於驗證目的。 – maggick

+0

它不是提交哈希。這個JSON表示* blob *,而不是提交。見下文。 – Chris

回答

1

這對給定BLOB,這是Git是如何在內部表示文件的散列。這是常見的知識提交有散列,但so do all other Git objects

Git是內容尋址文件系統。大。那是什麼意思?這意味着Git的核心是一個簡單的鍵值數據存儲。您可以在其中插入任何類型的內容,並且它會讓您返回一個可隨時重新檢索內容的密鑰。

樹,提交和標記是其他類型的Git對象。

要生成一個文件的散列手動你可以使用hash-object plumbing command

$ git hash-object README.md 
3d21ec53a331a6f037a91c368710b99387d012c1 

任何更改文件的內容將改變哈希,但它不依賴於文件的名稱,或權限。

與所有密碼哈希一樣,重複哈希是可能的,但極不可能。

+0

有沒有什麼方法可以在只下載文件的情況下生成密鑰? 我可以用它來判斷是否有人更改了文件? – KingofGamesYami

+0

@KingofGamesYami,請看我更新的答案。我不確定這是確定是否有人更改文件的最佳方式,但它可能會做你想做的。 – Chris

+0

我在做的是爲有限的環境創建一個安裝程序(使用LuaJ的ComputerCraft)。我可以執行GET和POST請求,但沒有其他的。 這部分對我很感興趣,因爲我可能想向我的安裝程序添加一個更新參數,以便它只下載沒有改變的內容。 另一個問題:如果文件夾中存儲的文件發生更改,文件夾的sha鍵是否會發生更改?這可能會減少我必須發送給github的GET請求的數量。 – KingofGamesYami