【问题标题】:Tag a remote git repository without cloning it标记远程 git 存储库而不克隆它
【发布时间】:2011-10-18 20:36:18
【问题描述】:

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

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

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

【问题讨论】:

  • 您如何访问此存储库?例如,如果这是一个裸存储库并且您使用 SSH 访问它,我认为您可以通过 SSH 对其执行标记命令。
  • @Legolas 不,你不能在裸仓库中运行任何命令。
  • 我刚刚尝试在一个裸存储库上运行git tag alpha master,它成功了。
  • @Legolas 您是否使用“git init --bare”或远程系统创建了您的存储库,然后从本地分支推送更改,然后进入远程服务器上的目录并能够运行“ git标签'在那里?我怀疑是因为“裸”目录根据定义没有工作树。如果我错了,请纠正我:)
  • 我做了一个裸仓库,然后我克隆了它并推送了一些测试文件,因为不需要空仓库,然后我在裸仓库中执行了标签命令,然后我将它拉出来看看是否有新标签存在。问题是所有命令都不需要工作目录,您只需进入 git 目录 self 即可执行命令。我在我的 git-server 上使用这种类型的工作进行维护。无论如何,我认为标记一个远程存储库是不可能的,因为这个提议实际上是在标记一个裸存储库,而它恰好是另一个存储库的远程。

标签: git tags


【解决方案1】:

要回答这个问题:目前无法使用 git 进行远程标记,但如果您可以通过某种方式访问​​远程(裸)存储库,则可以在远程位置进行标记.

比如你通过SSH访问git仓库,可以使用SSH登录,进入(裸)仓库,在(裸)仓库中执行tag命令(git tag build-1234 master)。

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

【讨论】:

【解决方案2】:

可以远程标记分支尖端的当前提交,但不能(据我所知)使用 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)

【讨论】:

  • 如何指定标签消息?
【解决方案3】:

Gitlab 有一个 API。非常有信心的其他人可能对此有一个终点。 http://docs.gitlab.com/ce/api/tags.html

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
  • 2015-02-27
  • 2010-09-18
相关资源
最近更新 更多