2010-11-28 10 views
25

Gibt es eine Möglichkeit, entfernte Niederlassungen in Mercurial wie dort in Git aufzulisten?Liste Remote-Niederlassungen in Mercurial

git branch -r 

ich die Zweige auf einem entfernten Rechner (zB Bitbucket) auflisten möchten, so verwenden:

hg branches -R `hg showconfig paths.default` --color false 

nicht mit Abbruch: Repository nicht lokal

Antwort

18

Nein, ist es nicht möglich, listet Zweige eines Remote-Repositorys auf, ohne sie lokal zu klonen.

Wenn ein SSH-Zugriff auf die Maschine mit dem Remote-Repository besteht, kann Mercurial direkt verwendet werden: ssh server hg -R path/to/repo branches.

Wenn das Repository mit hgweb serviert wird, dann eine Liste von Zweigen aus, dass abgeholt werden, den rohen Stil für eine einfache Analyse mit: https://www.mercurial-scm.org/repo/hg/branches?style=raw

BitBucket seine eigene API hat, wo es möglich ist, die Zweige zu erhalten finden their help und eine Abfrage wie zu einer URL wie https://api.bitbucket.org/1.0/repositories/mirror/mercurial/branches/

+0

Ja, das ist, was ich vermuten würde. Danke für die nützlichen Informationen über hgweb und bitbucket. – Raoul

+0

Ich frage mich, warum mercurial so konzipiert? Ich kann Revision des bestimmten Zweigs mit 'hg id -r ' erhalten, aber kann keine Liste aller Zweige erhalten. – neverov

+0

Es * funktioniert *, wenn das "Remote" -Repository auf dem gleichen Host ist und durch a angegeben wird Dateipfad. h. wenn '.hg/hgrc' oder' hg paths default' nur einen Pfad anzeigen und nicht z.B. ein ssh URI. Auf diese Weise können Sie Zweige sehen, die immer noch in dem Sinne entfernt sind, dass sie nicht gezogen wurden. –

18

mercurial-API erlaubt es:

from mercurial import ui, hg, node 

peer = hg.peer(ui.ui(), {}, 'http://hg.python.org/cpython') 
for name, rev in peer.branchmap().items(): 
    print name, node.short(rev[0]) 

Die obige snippet erzeugt:

default aaa68dce117e 
legacy-trunk b77918288f7d 
3.2 4787b9b2f860 
3.0 4cd9f5e89061 
3.1 5a6fa1b8767f 
2.3 364638d6434d 
2.2 61b0263d6881 
2.1 e849d484029f 
2.0 5fd74354d73b 
2.7 260f3ad7af4b 
2.6 f130ce67387d 
2.5 b48e1b48e670 
2.4 ceec209b26d4 
+0

Wie führen Sie ein solches Skript aus? –

+0

Sie fügen das Snippet in eine Datei ein und rufen es mit 'python filename.py' auf. Ist das, was du fragst? – gvalkov

+2

Ja, das stimmt. Vielen Dank. Ich war mir nicht sicher, welche Sprache es war. –

1

auf @ der gvalkov Antwort zu erweitern, Sie durch das Schreiben einer Datei rheads.py dies eine echte Erweiterung machen kann:

from mercurial import hg, commands, cmdutil, node 
cmdtable = {} 
command = cmdutil.command(cmdtable) 
@command('rheads', commands.remoteopts, 'hg rheads [SOURCE]') 
def rheads(ui, repo, source='default', **opts): 
    """print (possibly remote) heads 

    Prints a series of lines consisting of hashes and branch names. 
    Specify a local or remote repository, defaulting to the configured remote. 
    """ 
    other = hg.peer(ui or repo, opts, ui.expandpath(source)) 
    for tag, heads in other.branchmap().iteritems(): 
     for h in heads: 
      ui.write("%s %s\n" % (node.short(h), tag)) 

konfiguriert Wenn in ~/.hgrc mit

[extensions] 
rheads = …/rheads.py 

Sie können es laufen wie :

hg rheads 

Ich versuchte es ein Befehl zu machen, die außerhalb jedes Repository aufgerufen werden kann, einfach die URL als Argument spezifiziert, konnte aber nicht die Syntax zu arbeiten:

commands.norepo += " rheads" 
1

vielleicht suchen Sie hg incoming -B Das funktionierte ganz gut für mich. Dies zeigt die Lesezeichen an.