Пометьте удаленный репозиторий git, не клонируя его - PullRequest
30 голосов
/ 03 августа 2011

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

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

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

Ответы [ 3 ]

8 голосов
/ 03 августа 2011

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

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

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

6 голосов
/ 07 января 2015

Можно пометить текущий коммит на конце ветви удаленно, но не (насколько я могу судить) с помощью 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 голосов
/ 08 июля 2016

У Gitlab есть API для этого. Уверен, что другие могут иметь конечную точку для этого. http://docs.gitlab.com/ce/api/tags.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...