Отметьте удаленный репозиторий 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