Sehr langsame Mercurial-Netzwerkfreigabe unter Windows

856
jez

TortoiseHG benötigt etwa 15 Minuten, um einen Push von einem Repository auf meiner lokalen Festplatte (wo das .hgVerzeichnis 532 Dateien mit insgesamt 110 MB enthält) auf ein leeres Repository auf meinem Netzlaufwerk durchzuführen.

Wenn ich jedoch mit Windows Explorer das gleiche .hgVerzeichnis (532 Dateien, 110 MB) auf demselben Netzlaufwerk kopieren und einfügen, dauert es ungefähr 30 Sekunden bis 1 Minute.

Warum diese Verlangsamung um den Faktor 10-30? Kann ich das vermeiden? (dh unternimmt Mercurial etwas Unnötiges, das ich mit den entsprechenden Befehlszeilenoptionen vermeiden kann?)

Update: Es ist langsam genug, dass es sich negativ auf unseren Workflow auswirkt. Der gleiche Push von einem Standort zum anderen auf der lokalen HD ist schnell (einige Sekunden im Gegensatz zu Minuten). Dies bedeutet, dass es tatsächlich viel schneller ist, das vollständige Remote- .hgVerzeichnis an einen temporären Speicherort auf dem lokalen Laufwerk zu kopieren, darauf zu drücken und es anschließend wieder auf das Netzlaufwerk zu kopieren. Bevor ich überlege, ob ich diesen unbeholfenen Workaround tatsächlich implementieren würde ... gibt es doch einen besseren?

[Details: Ich verwende die Befehlszeile hg.exevon TortoiseHG 3.4.1 unter Windows 7 und das Netzlaufwerk ist eine Apple TimeCapsule. Ich greife darauf über die Airport Base Station Agent-Software zu, die das Erscheinungsbild eines normalen (dh Samba-ähnlichen) Netzlaufwerks erzeugt. Das Laufwerk ist gemountet Z:\, und der angegebene defaultPfad hgrcbeginnt mit Z:\, so dass der Push, soweit bekannt, von einem "lokalen" Standort zu einem anderen erfolgt, dh nicht über http oder ssh. Die gleiche Verlangsamung geschieht, wenn ich den vollständigen UNC-Pfad \\Like\this\...anstelle von Z:\...] verwende.

2
(Vorausgesetzt, Ihre Sorge gilt dem ersten Anstoß ..) Ich denke, die Frage ist: Warum denken Sie, dass dies langsam ist? Haben Sie Erfahrung mit Quecksilber-, Git-, Fossilien- oder ähnlichen Systemen, die schneller arbeiten? Es ist normal, dass die Synchronisation eines Quellsteuerungssystems langsamer ist als eine direkte Dateikopie. Dateikopie ist eine direkte Kopie des Dateisystems. Mercurial Push / Pull ist eine Schicht der Quellcodeverwaltung über das Dateisystem, die Überprüfungen durchführt und nur den erforderlichen Zweig (z. B. Master) und seine Objekte auswählt. Eine andere Frage kann sein, dass ein Problem zehnmal langsamer ist; Ich glaube nicht, dass es ein Thema ist. jehad vor 7 Jahren 0
Nein, ich denke, es gibt ein echtes Problem. Ich habe gerade den gleichen Push von einer Stelle auf der lokalen Festplatte zur anderen versucht: Es dauert einige Sekunden im Gegensatz zu Minuten. Dies bedeutet, dass es tatsächlich effizienter ist, (1) die vollständige entfernte .hg von der Netzwerkfestplatte an einen temporären Speicherort auf der lokalen Festplatte zu kopieren, (2) den Push von lokaler HD auf lokale HD durchzuführen, (3) die vollständige (und jetzt erweiterte) temporäre lokale .hg-Datei auf der fernen Netzwerkfestplatte. Dies weist darauf hin, dass etwas in der Art und Weise, wie Mercurial mit dem Netzwerkspeicher umgeht, sehr ineffizient ist. Vielleicht helfen bestimmte Befehlszeilenschalter? jez vor 7 Jahren 0

0 Antworten auf die Frage