2009-09-04 10 views
7

Ich habe ein lange bestehendes Problem: Bei der Arbeit verwenden wir Mercurial als DSCM, aber wir können nicht herausfinden, wie wir unsere Konfigurationsdateien synchron halten.Frage zum Mercurial-Workflow (Umgang mit Konfigurationsdateien)

Das Problem ist, dass wir Config-Dateien verfolgen wollen und in der Lage sein wollen, den Inhalt der Konfigurationsdatei unter den Entwicklern auszutauschen, aber jeder Entwickler möchte seinen connectionStrings-Bereich unabhängig von anderen haben.

Ist es möglich, Config-Dateien irgendwie zu verfolgen, aber beim Ziehen und Drücken die Verbindungsstrings zu überspringen?

Wir haben versucht, Konfigurationsdateien zu .hgignore hinzuzufügen, aber wenn jemand etwas Wichtiges zur Konfigurationsdatei hinzufügt, müssen wir es per E-Mail teilen.

Vielen Dank.

Antwort

6

Wenn Sie nicht mit der Aufnahme von benutzerdefinierten Einstellungen umgehen können, haben Sie einfach eine Basis-Konfigurationsdatei im Repo.

Dann muss jeder Entwickler seine eigene Anpassung oben (mit mq) setzen. Wenn die Anpassung nicht zu aufdringlich ist, wird die Zusammenführung immer gut gehen.

Es gibt eine andere Art und Weise ist, in der Sie immer wieder Ihre Anpassung fusionieren, aber dann beim Schieben müssen Sie daran denken nicht die Zusammenführung Zweig zu schieben (tX Hauptstrecke ist, c1 die Anpassung ist)

t1-t2-t3-t4-...-tN 
    \ \  \ \ 
    c1---c2-----c3--c4 

Die dev Bedürfnisse und Push-Änderungen, die nur tX als Eltern haben, cX sollte nie aus dem Repo entkommen.

1

Die Nicht-DVCS-Methode besteht darin, den Buildprozess so einzurichten, dass die Verbindungszeichenfolgen aus einer separaten Konfigurationsdatei gelesen und dann während des Buildprozesses vorverarbeitet werden (in Java könnten Sie ant oder maven zum Filtern von Eigenschaften verwenden) Datei, ich weiß nicht über MS-Land).

4

Ich kenne die Details Ihrer Konfigurationsdateien nicht, aber wenn Sie andere Dateien hinzufügen können, erstellen Sie eine config_local Datei, die die entwicklerspezifischen Einstellungen enthält. Fügen Sie diese Datei zu .hgignore hinzu. Allgemeine Einstellungen gehen in die Hauptkonfigurationsdatei, die dann die Datei config_local enthält.

Wie Ken sagt, wenn die Einfügung keine Option ist, dann kann die Vorverarbeitung während des Build-Schritts der richtige Weg sein.

3

Sie können Mercurial Queues verwenden, um es zu tun. Also, was Sie tun würden, ist die "echte" Konfiguration (en) unter hg (mit ihren echten Namen), und Entwickler können ihre Anpassungen mit Patches, die oben sitzen und mit mq gepflegt werden.

Wenn Entwickler dann die echte Konfiguration aktualisieren müssen, werden sie ihren Patch, der alle ihre Anpassungen enthält, aus dem Stapel entfernen, die Änderung an der Konfiguration vornehmen und commit + push es.

Vorausgesetzt, dass alle anderen Entwickler diese bestimmten Änderungen in ihren eigenen Warteschlangen nicht überschrieben haben, erhalten sie sie beim nächsten Mal, wenn sie + update ziehen.

0

Es ist ein bisschen eine Bastardisierung, aber Sie könnten die KeywordExtension verwenden, um Tokens automatisch zu erweitern. In Ihrer Konfigurationsdatei setzen Sie etwas wie folgt:

db.host = $DBHOST$ 
db.host = $DBUSER$ 
db.host = $DBPASS$ 

und dann in ihrer ~ /.hgrc files user hätte so etwas:

[extensions] 
hgext.keyword= 
[keyword] 
# expand keywords in all python files in working dir 
**.conf = 
[keywordmaps] 
DBHOST = dev.server.internal 
DBUSER = myname 
DBPASS = mypass 

Produktion würde natürlich seine eigene .hgrc haben.

Das Schema würde jeden ein wenig Einrichtungszeit kosten, aber danach sollte es automatisch sein. Die Standardwerte könnten sich in der systemspezifischen Datei/etc/mercurial/hgrc befinden, falls der Benutzer keine eigenen privaten Verbindungszeichenfolgen festlegen wollte.

1

Versetzen Sie Ihre Verbindungszeichenfolgen in eine andere Datei. z.B. in web.config:

<connectionStrings configSource="connections.config" /> 

Dann haben Sie eine connections.config Datei mit den Verbindungszeichenfolgen, die Sie aus dem Repository ausschließen können dabei jeder Entwickler zu Inhalt ihres Herzens zu lassen ändern.

Wenn Sie eine Referenzversion der Datei connections.config haben möchten, fügen Sie einfach eine weitere Datei connections.example.config hinzu, die sich in der Quellcodeverwaltung befindet, und verwenden Sie diese als Ihre Vorlagenversion.