我正在使用opscode repo,并且需要有关其他一些存储库的信息。当有人发布" deploy"命令,它们可以提供要部署的分支或标记(或可能是其他refspec)。例如......
deploy main_app==1.2.3
deploy main_app workflow_app==4.5.6
deploy app_config==ugly-test-branch
main_app,workflow_app和app_config都在不同的回购中,并且没有一个在我目前所在的回购中。
对于每个repo,我想确定给定的refspec是否存在,如果它不是分支,它是什么分支?
我可以用git ls-remote
回答第一个问题,但有没有办法告诉对象在什么分支中,而不至少做git clone --bare
?
答案 0 :(得分:2)
如果您需要历史记录结构,您必须自己获取历史记录或与某个有权访问历史记录的服务器通信。那里有任意数量的show-me-the-repo-structure服务器,从内置的git instaweb
到github,但它们都依赖于实际的repo方便,所以他们可以展示什么&# 39; s in。
答案 1 :(得分:2)
对于每个回购,我想确定给定的refspec是否存在
这些名称(1.2.3
等)实际上不是 refspecs ,而只是"名称",以及那些不合格的名称。当然,refspecs - 其一般形式为+name1:name2
,其中一些部分是可选的,两个名称不一定完全合格 - 确实允许一个简单的名称,但这里的想法是refspec最终成为两部分源 - 冒号 - 目的地序列,加上可选的前导加号意味着力。这些名字不这样做。
...如果它不是分支,它是什么分支?
我可以使用
回答第一个问题git ls-remote
右:git ls-remote remote name
将 name
发送到遥控器,然后不仅为您提供限定,还会告诉您该名称对应的哈希ID,远程存储库。
但有没有办法告诉对象是什么分支而不至少做一个git clone --bare?
一般来说,没有。此外,它可能位于零个或多个分支中,如果完全限定的表单是标记(例如refs/tags/v2.1.1
),则它可能指向带注释的标记 object,然后指向另一个对象,该对象可能是另一个带注释的标记对象。最终,带注释的标签将解析为非标签。你也可以从git ls-remote
:
$ git ls-remote origin | grep v2.1.1
ed4f38babf3d81693a68d06cd0f5872093c009f6 refs/tags/v2.1.1
349cb5096397d9d1da33f2d046fa7e192e6214e7 refs/tags/v2.1.1^{}
但除非目标对象本身是一个或多个分支的提示,否则必须有足够的这些对象来枚举足够的图形以找出目标对象(在这种情况下为349cb5096397d9d1da33f2d046fa7e192e6214e7
):
并且实现这两者的一般方法是克隆存储库。