簡體   English   中英

如何唯一標識git存儲庫

[英]How can I uniquely identify a git repository

我想創建一個工具,在克隆所述存儲庫之前檢查我是否已經擁有遠程存儲庫的本地克隆。 要做到這一點,我需要一種方法來測試B是否與存儲庫A相同 - 我猜我的意思是他們有可合並的歷史記錄。 B的名稱可能與A不同,可能還有其他分支 - 通常的用例。

有沒有辦法做到這一點? 我有一個初步的想法如何做到這一點,但我想也許這里有人有一個明確的答案。

設想

獲取分支列表並搜索公共分支(通過哈希)。 然后對於公共分支,檢查初始提交是否相同(通過哈希)。 那時我會說'夠好'。 我想我沒事,除非有人一直在搞亂歷史,我願意忽略這個用例。 要做到這一點,我需要一種方法來獲取分支並從遠程存儲庫提交信息,而無需進行克隆。 我可以使用ssh和bash來解決這個問題,但是僅使用git的解決方案會更好。

對這個半生不熟的想法的反饋也很受歡迎。

為什么這不是Git存儲庫唯一ID的重復

引用的問題是尋找唯一的存儲庫ID,或者創建一個存儲庫ID。 沒有這樣的野獸存在,即使它確實存在,它是否與此相關仍然值得懷疑,因為我想確定兩個存儲庫是否具有可合並的歷史(即我可以在兩者之間獲取和合並) - 一個稍微更好的定義問題。 我願意忽略用戶修改歷史記錄的可能性,但也很想聽聽如何處理這種情況。

正如你在相關問題中看到的那樣; git存儲庫沒有唯一標識。 然而; 你可以比較主分支上第一次提交SHA-1 ; 這應該足以滿足99.999%的所有情況(假設第一次提交永遠不會改變)。

如果你想更加確定,你可以考慮使用第二次提交的SHA-1; 再次假設它永遠不會改變:)。 使用前兩個提交的SHA-1; 我猜你有大約1/2 ^ 320 = 4.7 * 10 ^ -97的錯誤機會......

如果你不確定甚至有一個主分支; 你可以假設你只有一個無父根提交 ,並采用它的SHA-1。 您可以使用此命令獲取根提交(或提交):

git rev-list --parents HEAD | egrep "^[a-f0-9]{40}$"

(從這個答案復制)

或者(更容易理解,感謝@TomHale):

git rev-list --parents HEAD | tail -1

.git/config文件中,您有克隆存儲庫的URL。

您可以比較2個存儲庫的起源。

例:

[remote "origin"]
    url = git://myohost/myproject.git

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM