Nach einer Änderung in meinem lokalen Repo setze ich mit hg commit -m <message>
ein, dann schiebe ich auf meinen Server mit hg push
, dann aktualisiere ich auf meinem Server das Arbeitsverzeichnis mit hg update
.
Gibt es einen besseren Weg, dies zu tun?
Die ersten zwei Schritte, die Sie beschrieben haben:
%Vor%werden benötigt, da die Commits in Mercurial (und den meisten anderen DVCS) vollständig vom Server getrennt sind. Du könntest einen Post-Commit-Hook schreiben, um den Push nach jedem Commit auszuführen, aber dies wird nicht empfohlen, da es dich daran hindert, einfache Fehler während des Commits und vor dem Push zu korrigieren.
Da Sie versuchen, ein Update auf dem Server durchzuführen, gehe ich davon aus, dass Sie eine Version des Codes in Ihrem Repository auf dem Server ausführen. Ich gehe davon aus, weil der Server normalerweise einfach als Master-Repository für Sie und Ihre Entwickler agieren würde, um auf diese zuzugreifen (und auch Backups, etc.), und würde nicht das explizite hg update
benötigen.
Angenommen, Sie führen Code auf dem Server aus, können Sie versuchen, den Push und das Update mit diesem Befehl zu ersetzen:
hg pull <path to development repo> -u
, die einen Pull von Ihrem lokalen Repo und dann ein automatisches Update durchführt. Abhängig von Ihrer Serverkonfiguration kann es schwierig sein, den Pfad zu Ihrem lokalen Repo zu ermitteln.
Für den ersten Teil der Frage (dh automatisch drücken, wenn Sie ein Commit machen), können Sie den Trick verwenden, der in dieser Antwort beschrieben wird: mercurial automatischer Push bei jedem Commit .
Wenn Sie das Arbeitsverzeichnis automatisch aktualisieren möchten, können Sie dies mit einem Hook machen. Fügen Sie dies in der hgrc Ihres Repository ( .hg/hgrc
in Ihrem Server-Verzeichnis) hinzu:
Dadurch wird das Arbeitsverzeichnis jedes Mal automatisch aktualisiert, wenn ein Push auf diesen Server erfolgt. Dieser Hook wird in der Mercurial-FAQ beschrieben .
Wenn Sie diese beiden Lösungen verwenden, wird das Commit beim nächsten Mal, wenn Sie hg commit -m "message"
ausführen, automatisch auf den Remote-Server übertragen und das Arbeitsverzeichnis auf dem Server wird aktualisiert.
Es gibt eine Erweiterung namens Autosync , die Sie möglicherweise nützlich finden:
Diese Erweiterung stellt den Autosync-Befehl zur Verfügung, der automatisch und kontinuierlich Änderungen der Arbeitskopie festschreibt, Änderungen von einem anderen Repository abruft (zusammenfasst, zusammenführt) und lokale Änderungen zurück in das andere Repository schiebt. Stellen Sie sich Konfigurationsdateien oder Aufgabenlisten als Beispiele für Dinge vor, die Sie synchronisieren möchten. Auf einer höheren Ebene synchronisiert der Befehl autosync nicht nur Repositories, sondern auch Arbeitskopien. Ein zentrales Repository (normalerweise ohne Arbeitskopie) muss als Synchronisationshub verwendet werden:
Tags und Links mercurial