标记远程git存储库而不克隆它

时间:2011-08-03 06:53:54

标签: git tags

有没有办法标记远程git存储库而无需在本地克隆

为了将代码存储库与配置存储库相关联,我希望(作为CI构建步骤)使用build-n标记配置存储库的当前头部(其中N是jenkins提供的当前内部版本号) )。

配置存储库不是用作构建的一部分,我只是想要一种简单的方法来获取配置版本,就像在构建版本1234时那样,并将其标记为“build-1234”似乎是最简单的方法来实现这一目标。

3 个答案:

答案 0 :(得分:8)

要将此作为答案:目前无法使用git进行远程标记,但如果您以某种方式访问​​远程(裸)存储库,则可以在远程位置进行标记

例如,如果您通过SSH访问git存储库,则可以使用SSH登录,转到(裸)存储库并在(裸)存储库中执行标记命令(git tag build-1234 master)。

(我不完全确定@ ruslan-kabalin提到的工具)

答案 1 :(得分:6)

可以远程标记分支顶端的当前提交,但不能(据我所知)用git瓷器或管道标记。我们必须直接与远程git receive-pack通话。

这里有一些python使用dulwich来做我们想要的事情:

#!/usr/bin/env python

from dulwich.client import get_transport_and_path
import sys


def tag_remote_branch(repo_url, branch, tag):
    client, path = get_transport_and_path(repo_url)

    def determine_wants(refs):
        tag_ref_name = 'refs/tags/%s' % tag
        branch_ref_name = 'refs/heads/%s' % branch
        # try not to overwrite an existing tag
        if tag_ref_name in refs:
            assert refs[tag_ref_name] == refs[branch_ref_name]
        refs[tag_ref_name] = refs[branch_ref_name]
        return refs

    # We know the other end already has the object referred to by our tag, so
    # our pack should contain nothing.
    def generate_pack_contents(have, want):
        return []

    client.send_pack(path, determine_wants, generate_pack_contents)


if __name__ == '__main__':
    repo_url, branch, tag = sys.argv[1:]
    tag_remote_branch(repo_url, branch, tag)

答案 2 :(得分:3)

Gitlab有一个API。相当自信的其他人可能有一个端点。 http://docs.gitlab.com/ce/api/tags.html