繁体   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