2010-12-21 12 views
6

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

6

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 
1

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.

+0

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

+0

Wechseln sie oft? –

+0

nicht sehr oft. – Jan

1

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.

2

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).