2010-12-30 10 views
4

Ich habe ein lokales Repository, das ich jetzt entschieden habe, auf einen Remote-Server zu schieben (zum Beispiel habe ich einen Host, der mercurial Repositories erlaubt und ich auch bin versuchen, zu Bitbucket zu schieben). Das Repository hat viele Dateien und ist etwas mehr als 200 MB groß. Vor Ort bin ich in der Lage, das Repository ohne Probleme zu klonen.Push ein lokales mercurial Repository zu einem Remote-Server oder Klonen auf Server von lokalen

Jetzt habe ich viele Änderungen in diesem Repository, und ich habe ein paar Tage verschwendet, um herauszufinden, wie der Remote-Server mein Repository klonen kann. Ich kann hg serve nicht außerhalb des LAN arbeiten. Ich habe alles versucht. Stattdessen habe ich ein neues Repository auf den Remote-Servern (sowohl auf dem Host als auch auf Bitbucket) erstellt, in dem nichts enthalten ist. Jetzt dränge ich das komplette Repository, das ich lokal habe, auf diese entfernten Standorte. Bisher war es nicht erfolgreich, da der Push-Vorgang auf searching for changes stecken bleibt und mir keine andere nützliche Ausgabe gibt. Ich habe es ungefähr eine Stunde ohne Veränderung gehen lassen.

Jetzt ist meine Frage, was mache ich falsch, soweit hg serve betroffen ist? Ich kann lokal, aber nicht remote darauf zugreifen (über DynDns - ich habe es richtig konfiguriert und der Router leitet die Ports korrekt weiter), damit ich den Server dazu bringen kann, das Repository das erste Mal zu klonen, nach dem ich drüber drängen werde. Meine zweite Frage ist, unter der Annahme, dass der Klon auf dem Server nicht funktioniert (zum Beispiel, wenn ich mein aktuelles Repository zu bitbucket schieben würde), ein leeres Repository auf dem Server erstellt und dann ein lokales Repository auf das neue entfernte Repository schieben ok? Ist das die Quelle des searching for changes Problems?

Jede Hilfe in dieser Hinsicht würde sehr geschätzt werden.

+2

Ich glaube, Sie sprechen Sie mit uns auf der Mercurial Benutzer Mailingliste kommen sollten: [email protected] - Setup-Probleme wie diese erfordern Diskussion und nicht nur eine einfache Frage und Antwort. Das ist eine bessere Nutzung Ihrer Zeit und der Zeit der Mercurial-Community, von der nur ein Bruchteil versucht, mit StackOverflow Schritt zu halten. –

Antwort

4

was mache ich falsch so weit wie hg serve betroffen ist?

Schwer zu sagen, aber hg serve ist normalerweise nicht die Art und Weise würde ich ein Remote-Klon in einem 3rd-Party-Service zu erstellen. Für mich würde ich kein Loch in meine Firewall stecken, wenn ich es nicht müsste.

ein leeres Repository auf dem Server erstellen und dann ein lokales Repository in die neuen Remote-Repository ok drücken?

Ja. So erstelle ich einen Remote-Klon im Kiln. Erstellen Sie ein neues leeres Repo in Kiln, greifen Sie auf die URL für das neue Repository zu und drücken Sie dann von meinem Computer aus darauf.

Ist das die Quelle der Suche nach Änderungen Problem?

Nicht sicher, aber this report schlägt vor, dass ein wirklich großer Schub ein Problem sein kann. Sie schlagen vor, kleinere Spannfutter einzubringen (z. B. ein paar Umdrehungen pro Zeiteinheit). Eine weitere Überlegung ist, ob Sie ohne Ihren Revisionsverlauf leben können (Sie können ein neues Repo aus der aktuellen Version der Dateien erstellen und dieses Repository verschieben. Der Bericht legt auch nahe, dass die Authentifizierung die Ursache einiger Probleme war . eine andere Fehlermeldung)

Andernfalls müssen Sie das Problem auf diese spezielle Repo, Ihre Verbindung zu dem Remote zu isolieren, oder der Remote-Repo Einige Gedanken mehr Debugging, um zu versuchen zu tun.

  1. Klingt wie Sie bereits einen anderen Host versucht, aber vielleicht versuchen, einen mehr?
  2. können Sie ein leeres Repository oder einen anderen Repo von Ihrem Push Maschine zur Fernbedienung?
  3. Haben Sie Zugang zu einem anderen von der Maschine/Netzwerk (zum Beispiel eines Laptop und einen lokalen coffehouse mit WiFi), die Sie versuchen können, das Ziel Repo oder eine Test-Repo zu schieben?
+1

Ich habe dies als die richtige Antwort markiert, einfach weil eine Menge nützlicher Informationen vorhanden ist gegeben worden. Ich konnte jedoch für mein spezielles Problem keine Lösung finden. – Samaursa

2

Ja, Sie können ohne Probleme zu einem leeren Repository schieben. Wenn Sie drücken oder ziehen, überprüft Mercurial, ob die Quell- und Ziel-Repositorys miteinander in Beziehung stehen. Das hindert mich daran, Changesets, die zum Beispiel OpenOffice betreffen, in meinen Klon von Mozilla Firefox zu ziehen.

Ein neues, leeres Repository bezieht sich auf alle Repositories. Sie können also immer ein leeres Repository erstellen und Changesets dorthin ziehen.

In der Tat, wenn Sie das tun

hg clone http://example.net/my-repository 

dann ist das die gleiche wie

hg init my-repository 
cd my-repository 
hg pull http://example.net/my-repository 

außer zu tun, dass es ein Standardpfad eingerichtet werden, würde nicht für Sie - Kommentar von barjak sehen für wie geht das.

+0

Im Fall von 'hg clone' wird auch ein Standard-Alias ​​gesetzt. Fügen Sie das zum zweiten Eintrag hinzu: 'echo" [Pfade] default = http: //example.net/my-repository "> .hg/hgrc' – barjak

0

Sie könnten versuchen, eine Reihe von Changesets zu schieben. Dies hilft bei Speicherproblemen. Es kann Ihnen auch helfen zu isolieren, welches Changeset das Problem verursacht.

1

brauchen Menschen, es zu wissen, in Ordnung (und einfachste) nur eine neue Repo init und schieben, wie die akzeptierte Antwort sagt.

Aber ein andere Option, wenn Ihr Server zugänglich ist ssh einen schnellen Reverse-Tunnel mit Kitt an den Fenstern lokal zu machen wäre. Sie müssen Ihre Firewall nicht ändern.

in Kitt sucht ssh >> tunnelt es das Menü, und entschied sich für die Remote-Taste für einen Reverse-Tunnel.

Oder auf einem Linux lokalen so etwas wie:

ssh -fnNTR <any port you want to forward to your remote>:localhost:<port for local hg serv> <and then here type what you would normally to ssh to your remote ssh sever> 

Sie haben nun Ihre Firewall umgangen und klonen!

sollte ich hinzufügen, die Sie durch Änderung R L (local) nur zum Schieben und Ändern der Portnummern, wenn ness einen normalen Vorwärts Tunnel tun können.

+0

Viele Menschen wissen nicht, dass Sie Tunnel über SSH senden können, anstatt sie nur für den Shell-Zugriff zu verwenden. – sabgenton

1

Hg Mercurial kann mit dem Secure Shell-Protokoll verwendet werden. Es gibt zwei Varianten Pfad:

$ hg clone localrepo ssh://[email protected]:port/relative_remote_path 
$ hg clone localrepo ssh://[email protected]:port//absolute_remote_path