Vraag Tag een remote git repository zonder het te klonen


Is er een manier om een ​​remote git repository te taggen? zonder het te hebben gekloond lokaal?

Om een ​​coderepository te correleren met een config-repository, wil ik (als een CI-buildstap) tag wat dan ook de huidige kop van de config-repository is met build-n (waarbij N het huidige buildnummer is dat door jenkins wordt geleverd).

De config-repository wordt niet gebruikt als onderdeel van de build, ik wil gewoon een eenvoudige manier om de configuratie-revisie op te halen zoals die was toen bijvoorbeeld versie 1234 werd gebouwd, en het taggen als "build-1234" lijkt de eenvoudigste manier om bereik dit.


26
2017-08-03 06:53


oorsprong


antwoorden:


Om dit als een antwoord te hebben: er is op dit moment geen manier om remote tagging met git te doen, maar als je op de een of andere manier toegang hebt tot de remote (bare) repository, kun je mogelijk taggen op de externe locatie.

Als je bijvoorbeeld toegang hebt tot de git-repository via SSH, kun je inloggen met SSH, naar de (bare) repository gaan en de tag-opdracht uitvoeren (git tag build-1234 master) in de (bare) repository.

(Ik ben niet helemaal zeker van de tool genoemd door @ ruslan-kabalin)


8
2017-08-03 15:17



Het is mogelijk om de huidige commit aan het uiteinde van een branch op afstand te taggen, maar niet (voor zover ik weet) met git-porselein of sanitair. We moeten een afstandsbediening spreken git receive-pack direct.

Hier is een python die gebruikt dulwich doen wat we willen:

#!/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)

5
2018-01-07 07:29



Gitlab heeft er een API voor. Vrij zeker andere ander kan hier een eindpunt voor hebben. http://docs.gitlab.com/ce/api/tags.html


2
2017-07-07 22:53