Отметьте удаленный репозиторий git, не клонируя его

Есть ли способ пометить удаленный репозиторий git, не клонировав его локально?

Чтобы скорректировать репозиторий кода с репозиторием config, я хочу (как шаг построения CI) тег, который является текущим заголовком репозитория конфигурации с помощью build-n (где N - это текущий номер сборки, предоставленный jenkins).

Репозиторий конфигурации не используется как часть сборки, я просто хочу простой способ получить ревизию конфигурации, как это было, когда, например, была построена версия 1234, а пометка "build-1234" выглядит как Простейший способ добиться этого.

Ответ 1

Чтобы иметь это в качестве ответа: на данный момент нет возможности делать удаленные тегирования с помощью git, но если у вас есть доступ к удаленному (голом) репозиторию, вы можете пометить его на удаленное расположение.

Например, если вы заходите в репозиторий git через SSH, вы можете войти в систему с помощью SSH, перейти в (голый) репозиторий и выполнить команду тега (git tag build-1234 master) в (голом) репозитории.

(Я не совсем уверен в том, что инструмент упоминается @ruslan-kabalin)

Ответ 2

Можно пометить текущую фиксацию на кончике ветки удаленно, но не (насколько я могу судить) с git фарфором или сантехникой. Нам нужно напрямую поговорить с удаленным git receive-pack.

Здесь некоторый питон, который использует 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