Ich habe eine Datei in Mercurial, die ich will, dass Dev-Maschinen die Datei ziehen, aber ich möchte den Deployment-Server nicht ziehen die Datei (es hat spezielle Mods, die die Dev-Maschinen nicht haben) . Ist das möglich, oder sollte ich nur eine benutzerdefinierte Push-to-Server-Lösung haben, anstatt nur einen hg-Pull zu machen?Conditional Mercurial Ignorieren Datei
Antwort
Ein typischer Weg, dies zu tun, wäre folgendes zu tun: im Repository jede Datei
Sie speichern eine Kopie, und sie richtig zu benennen. wenn die betreffende Datei zum Beispiel web.config
ist, würde speichern Sie die folgenden zwei im Repository:
web.server.config
web.dev.config
Dann würden Sie einen eingebauten Schritt fügen Sie die richtige Datei, um sicherzustellen, auf die tatsächliche web.config
Datei kopiert wurde, können Sie eine Batch-Datei:
if "%COMPUTERNAME%" == "SERVER" copy web.server.config web.config
if not "%COMPUTERNAME%" == "SERVER" copy web.dev.config web.config
Sie dann würde web.config sich durch .hgignore ignorieren:
glob:web.config
Ist das etwas, das außerhalb der Versionskontrolle gelöst werden kann? Nehmen Sie beispielsweise die Datei in alle Kopien des Repositorys auf, aktivieren oder deaktivieren Sie die Verwendung jedoch mit Umgebungsvariablen oder etwas Ähnlichem. Das hört sich nicht nach etwas an, mit dem die meisten Versionskontrollsysteme zu tun haben, es sei denn, Sie verwenden bösartige Hacks, um Dinge wie Hinzufügen/Entfernen/Patchen von Dateien nach der Aktualisierung durchzuführen.
Eine Option ist eine spezielle hgignore-Datei für den Deployment-Server zu erstellen, die nicht in das Repository aufgenommen werden könnten oder könnten. Geben Sie dann in der Datei hgrc des Servers den Pfad zur speziellen hgignore-Datei mit der Variablen ignore
an.
Dies würde sicherstellen, dass Aktualisierungen der Datei vom Deployment Server ignoriert werden, aber weiterhin wie für die Entwicklungsmaschinen üblich aktualisiert werden können.
Eine Variante von Karlsens Antwort, die ich immer benutze.
Ich habe /config
oder /etc
Verzeichnis im Projekt. Das Verzeichnis enthält oft Probe configs wie:
dev.yaml
ci_server.yaml
Dann ziehen meine Apps aus /etc/app.yaml
, die ein symbolischer Link auf die richtige Konfiguration ist abhängig von dem Host, auf es laufen gelassen wird.
Am besten denken Sie daran, es auf diese Weise zu tun, haben Sie keine Variantencode Pfade (die Batch-Skript Zweige), die beseitigt einen potenziellen Fehler Vektor. Auf diese Weise können Sie den gleichen Codepfad verwenden, der in der Produktion verwendet wird (bis dorthin, wo nach der Überschreibungsdatei gesucht werden soll).
Ich stimme zu, aber diese Datei ist sowohl auf dem Server als auch auf den Dev-Maschinen notwendig. Es ist eine Einstellungsdatei mit Pfaden zu Web-URLs/DB-Verbindungszeichenfolgen/etc, und diese Werte sind auf dem Server anders als die Dev-Maschinen. – Jan
Wechseln sie oft? –
nicht sehr oft. – Jan