Wie gehen Sie mit den Konfigurations-Dateien in der Quellcodeverwaltung?
Lassen Sie uns sagen, Sie haben eine typische web app und mit einem Datei-Konfiguration.was auch immer. Jeder Entwickler an dem Projekt arbeiten wird eine version für Ihre dev-Boxen, gibt es ein dev, prod-und Bühnen-Versionen. Wie gehst du mit dieser in der source control? Nicht, prüfen Sie in dieser Datei überhaupt, überprüfen Sie es mit verschiedenen Namen oder tun etwas ausgefallenes insgesamt?
InformationsquelleAutor deadprogrammer | 2008-08-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Was ich in der Vergangenheit getan haben, ist eine Standard-config-Datei, die überprüft wird, in der Quellcodeverwaltung. Dann, jeder Entwickler hat seine eigene override-config-Datei, die, ausgeschlossen aus der Quellcodeverwaltung. Die erste app lädt die Standardeinstellungen, und dann, wenn die override-Datei vorhanden ist, lädt und verwendet die Einstellungen aus dem override in den Voreinstellungen der default-Datei.
Im Allgemeinen, je kleiner die override-Datei, desto besser, aber es kann immer enthalten, weitere Einstellungen für einen Entwickler mit einem sehr nicht-standard-Umgebung.
InformationsquelleAutor yukondude
Nicht version dieser Datei. Version eine Vorlage oder so etwas.
InformationsquelleAutor Grant
Konfiguration ist - code, und Sie sollten version es ist. Wir stützen unsere Konfigurations-Dateien auf den Benutzernamen; im UNIX/Mac und Windows können Sie den Zugriff auf die Benutzer-login-name, und wie lange diese sind einzigartig für das Projekt, Sie sind in Ordnung. Sie können auch überschreiben Sie diese in der Umwelt, aber Sie sollte version, alles zu kontrollieren.
Damit können Sie auch prüfen, andere Konfigurationen, die helfen können, zu diagnostizieren, zu bauen und Problemen der Plattform.
Und wenn der Benutzername ist nicht zuverlässig, warum auch immer, dann kannst du eine einzelne Datei mit nur einer Zeile geben Sie den Namen des override-config-Datei. So ist sehr wenig (etwa 10 Zeichen oder so), die nicht versioniert. Und die README-Datei erklären könnte, dass Sie brauchen, um die Datei.
InformationsquelleAutor davetron5000
Mein team hält separate Versionen von config-Dateien für jede Umgebung (web.config.dev, web.config.test, web.config.prod). Unsere deployment-Skripte kopieren Sie die richtige version ist, Sie es web.config. Auf diese Weise haben wir die volle version Steuerung auf die config-Dateien für jede Umgebung, einfach ein diff, etc.
InformationsquelleAutor Brandon Wood
Derzeit habe ich die "Vorlage" config-Datei mit einer zusätzlichen Erweiterung zum Beispiel:
Allerdings sehe ich ein Problem mit dieser Methode, wenn wichtige Veränderungen haben sich geändert.
InformationsquelleAutor GateKiller
Die Lösung, die wir verwenden, ist nur die eine einzige Konfigurationsdatei (web.config/app.config), aber wir fügen einen speziellen Abschnitt, um die Datei, die enthält Einstellungen, die für alle Umgebungen.
Es ist ein LOCAL, DEV, QA, PRODUKTION Abschnitten jeweils mit den Konfigurationsschlüssel, der für Sie relevanten Umwelt in unserer config-Datei(s).
Was dieser alle Arbeit wird eine assembly mit dem Namen xxx.Umwelt, auf den verwiesen wird, in alle unsere Applikationen (winforms und webforms), erzählt die Anwendung, die die Umgebung des Betriebs auf.
Den xxx.Umwelt-assembly liest eine einzelne Zeile aus der Maschine.config der gegebenen Maschine, die sagt, dass es auf DEV, QA, etc. Dieser Eintrag vorhanden ist auf allen unseren workstations und Servern.
Hoffe, das hilft.
und vorausgesetzt, es gibt nicht 100te von Entwickler setzen Ihre benutzerdefinierten Einstellungen auch dort (es würde immer noch funktionieren, aber sehr umständlich)
InformationsquelleAutor Jason Stevenson
+1 auf die Vorlage Ansatz.
Aber da diese Frage von tag-Git, verteilte alternative
Federn in den Sinn, in welche Anpassungen sind gehalten, auf einem privaten Tests
Branche:
In diesem Schema, die mainline enthält eine generische, "Vorlage" config
Datei erfordern nur eine minimale Menge von Anpassungen funktionsfähig zu werden.
Nun, Entwickler/Tester können zwicken die config-Datei für Ihr Herz ist
Inhalt, und nur verpflichten, diese änderungen lokal auf einem privaten
testing-Zweig (z.B. B' = B + Anpassungen). Jedes mal mainline
Fortschritte, die Sie mühelos verschmelzen Sie in Tests, die Ergebnisse in
merges, wie D' (= D + zusammengeführte version von B ' s Anpassungen).
Diese Regelung wirklich glänzt, wenn die "Vorlage" config-Datei aktualisiert wird:
die änderungen von beiden Seiten zusammengeführt, und sind sehr wahrscheinlich
führen in Konflikten (oder test-Fehler), wenn Sie nicht kompatibel sind!
Es sei denn, es gibt eine Lösung für Nick ' s Kommentar, das wird nicht funktionieren, was ich sehe. Oder vielleicht erklären, was flow-Modell Sie verwenden, das würde das Problem lösen.
Ich Stimme mit der Methode des template-Ansatzes mit den notwendigen Anpassungen gebacken in der zum Zeitpunkt der Erstellung. Jedoch auf die Verzweigung Thema... Was, wenn es mehrere Vorlagen (dev, test, etc.) und die Entwickler einfach weglassen änderungen aus der verpflichtet. Nicht sicher, aber könnte funktionieren mit der Zusammenarbeit.
InformationsquelleAutor Damien Diederen
Habe ich die Vorlage vor, also web.dev.config, web.prod.config, etc, aber lieber jetzt die 'Datei überschreiben' - Technik. Die web -.config-Datei enthält die meisten der Einstellungen, sondern eine externe Datei enthält Umwelt-spezifische Werte wie db-verbindungen. Gute Erklärung auf Paul Wilson ' s blog.
Ich denke, dies reduziert die Menge an überschneidungen zwischen den config-Dateien, die Schmerzen verursachen können, wenn Sie neue Werte /Attribute.
InformationsquelleAutor Andy Whitfield
Habe ich immer alle Versionen von config-Dateien in der Quellcodeverwaltung im selben Ordner wie das web.config-Datei.
Beispielsweise
Ziehe ich diese Namenskonvention (im Gegensatz zu web.config.die Produktion oder die Produktion.web.config), weil
Den Standard-config-Datei sollte so konfiguriert sein, dass Sie die Anwendung ausführen können, die lokal auf Ihrem eigenen Computer.
Am wichtigsten ist, sollten diese Dateien werden fast 100% identisch in jedem Aspekt, auch die Formatierung. Sollten Sie nicht verwenden die Registerkarten in einer version und Räume, die in einem anderen zum Einrücken. Sie sollten in der Lage zu laufen ein diff-tool über die Dateien, um zu sehen, was genau ist der Unterschied zwischen Ihnen. Ich verwende WinMerge für die diff-Dateien.
Wenn Ihr build-Prozess erstellt die binaries sollte es werden, eine Aufgabe, die überschreibt die web -.config mit dem config-Datei für die entsprechende Umgebung. Wenn die Dateien sind gezippt, dann wird der nicht relevanten Dateien gelöscht werden sollten, zu bauen.
InformationsquelleAutor JackAce
@Grant hat Recht.
Ich bin in einem team mit fast 100 anderen Entwicklern, und unsere config-Dateien werden nicht in die Quellcodeverwaltung eingecheckt. Wir haben die Versionen der Dateien im repository, die gezogen werden mit jedem check out-aber Sie ändern sich nicht.
Es funktionierte ziemlich gut für uns.
InformationsquelleAutor Tom
Ich die Versionskontrolle, aber nie schieben Sie es auf den anderen Servern. Wenn die Produktions-server erfordert eine änderung, die ich machen, dass die Veränderung direkt in der config-Datei.
Es vielleicht nicht schön, aber es funktioniert Prima.
InformationsquelleAutor EndangeredMassa
Aufgegebenen, plain-vanilla-version der app/web.config sollte generisch genug sind, um auf alle Entwickler-Maschinen, und bleiben Sie bis zu Datum mit jeder neuen Einstellung ändert, etc. Wenn Sie benötigen einen bestimmten Satz von Einstellungen für dev/test/Produktion-Einstellungen, check-in separaten Dateien, die mit diesen Einstellungen, wie GateKiller angegeben, mit irgendeiner Art der Namensgebung, obwohl ich in der Regel gehen mit "web.prod.config", nicht zu ändern die Datei-Erweiterung.
InformationsquelleAutor Greg Hurlman
Wir eine Vorlage verwenden, die config-Datei, die überprüft wird, in der Versionskontrolle und dann einen Schritt in unserer automatisierten build zu ersetzen bestimmter Einträge in der template-Datei mit Umwelt-spezifische Einstellungen. Die Umwelt-spezifische Einstellungen werden in einer separaten XML-Datei, die auch unter Versionskontrolle.
Sind wir mit MSBuild in unserer automatisierten build -, so verwenden wir die XmlUpdate Aufgabe von MSBuild Community Tasks zum aktualisieren der Werte.
InformationsquelleAutor Sean Carpenter
Für eine lange Zeit, ich habe genau das gemacht, was bcwood getan hat. Ich bewahren Sie Kopien von web.dev.config, web.test.config, web.prod.config, etc. unter Kontrolle der Quellcodeverwaltung, und klicken Sie dann meinen build/deploy-system benennt Sie automatisch, wie es bereitgestellt, um verschiedene Umgebungen. Sie bekommen ein gewisses Maß an Redundanz zwischen den Dateien (besonders mit all den asp.net Sachen drin), aber im Allgemeinen es funktioniert wirklich gut. Sie müssen auch sicherstellen, dass jeder im team, erinnert sich aktualisieren alle die Dateien, wenn Sie eine änderung vornehmen.
Durch die Art und Weise, wie ich zu halten ".config" am Ende als Erweiterung, so dass sich Dateizuordnungen nicht kaputt zu bekommen.
Soweit lokalen Entwickler-Versionen der config-Datei, ich versuche immer mein bestes, um Menschen zu ermutigen, verwenden Sie die gleiche lokale Einstellungen so viel wie möglich, so dass es keine Notwendigkeit, um Ihre eigene version. Es muss nicht immer Arbeit für alle, in dem Fall, dass die Menschen in der Regel nur ersetzen, lokal wie nötig und gehen von dort aus. Es ist auch nicht schmerzhaft oder so.
InformationsquelleAutor jeremcc
Auf unser Projekt haben wir die Konfiguration in Dateien gespeichert, die mit einem Präfix dann unser build-system zieht bei der entsprechenden Konfiguration auf der Grundlage der aktuellen system - hostname. Dies funktioniert gut für uns, auf einem relativ kleinen team, so dass auch die Anwendung config-änderungen zu anderen Menschen-Dateien, wenn wir eine neue Konfiguration hinzufügen Element. Offensichtlich ist dies definitiv nicht skaliert werden, um open-source-Projekte mit einer unbegrenzten Anzahl von Entwicklern.
InformationsquelleAutor Rob Oxspring
Wir haben zwei Probleme hier.
Erstens haben wir zur Steuerung der Konfiguration-Datei, die mit der software mitgeliefert.
Ist es alle zwei einfach für einen Entwickler, um zu überprüfen, die in eine unerwünschte änderung der master config-Datei, wenn Sie die gleiche Datei in der devolvement Umgebung.
Auf der anderen Seite, wenn Sie eine separate Konfigurationsdatei enthalten ist, die durch den installer ist es sehr einfach zu vergessen, fügen Sie eine neue Einstellung an, oder lassen die Kommentare in der es nicht mehr synchron mit den Kommentaren in der devolvement konfigurieren der Datei.
Dann haben wir das problem, dass die Entwickler zu halten haben dort kopieren der Konfigurationsdatei up-to-date, wie anderen Entwicklern neue Konfigurations-Einstellungen. Jedoch einige Einstellungen wie Datenbank-Verbindungszeichenfolgen sind verschiedene für jeden Entwickler.
Es ist ein 3. problem, die Frage/Antworten nicht decken. Wie Sie die Zusammenführung der änderungen, die ein Kunde stellen, um Ihre Konfiguration-Datei, wenn Sie installieren eine neue version Ihrer software?
Erstens reduzieren Sie die Anzahl der Konfigurations-Elemente, die Sie in Ihrem Haupt-Konfigurations-Datei.
Wenn Sie nicht müssen, lassen Sie Ihre Kunden ändern Ihre Zuordnungen, Fluent NHibernate (oder anders) zu bewegen, die Konfiguration in den code.
Ebenfalls für die Abhängigkeiten gelten Injektion setup.
Aufgeteilt, die Konfiguration-Datei, wenn möglich, wie z.B. die Nutzung einer separaten Datei zu konfigurieren, was Log4Net loggt.
Nicht wiederholen Elemente zwischen viele Konfigurations-Dateien, z.B. wenn Sie 4 web-Anwendungen, die alle auf derselben Maschine installiert sind, haben eine Globale Konfigurationsdatei web.config-Datei in jeder Anwendung auf Punkte.
(Verwenden Sie einen relativen Pfad standardmäßig, so ist es selten zu haben ändern der web.config-Datei)
Prozess der Entwicklung Konfigurationsdatei, um die Versand-Konfigurationsdatei.
Könnte getan werden, indem default-Werte in der Xml-Kommentare, die sind dann in der Konfigurationsdatei festgelegt, wenn ein build fertig ist. Oder dass die Abschnitte, die gelöscht werden, als Teil des Prozesses zum erstellen der installer.
Statt nur einem Datenbank-Verbindungszeichenfolgen, haben eine pro-Entwickler.
E. g den ersten Blick für "database_ianr" (wo ianr ist mein username oder Computername) in der Konfigurationsdatei zur Laufzeit, wenn er nicht gefunden wird, dann suchen Sie nach "Datenbank"
Haben ein level 2", z.B. -oracle-oder SQL-Server" machen es schneller, die Entwickler bekommen für beide Datenbank-Systeme.
Diese können natürlich auch für jede andere Konfiguration Wert.
Dann alle Werte, die in "_userName" gestreift-out vor dem Versand der Konfigurations-Datei.
Sie können nicht entfernen Sie die Notwendigkeit für eine fürsorgliche person, die einige dieser kurzen problem.
InformationsquelleAutor Ian Ringrose
Ich glaube nicht, dass es eine einzige Lösung, die funktioniert für alle Fälle, wie es kann, hängt von der Sensibilität der Daten in den config-Dateien oder der Programmiersprache, die Sie verwenden, und so viele andere Faktoren. Aber ich denke, es ist wichtig, dass die config-Dateien für alle Umgebungen unter Kontrolle der Quellcodeverwaltung, so können Sie immer wissen, Wann es geändert wurde und von wem, und noch wichtiger, in der Lage sein, Sie zurückzugewinnen, wenn die Dinge schief gehen. Und das werden Sie.
So, hier ist, wie ich es mache. Dies ist für nodejs Projekte in der Regel, aber ich denke, es funktioniert für andere frameworks und Sprachen.
Was ich tun müssen, ist erstellen Sie eine
configs
im Stammverzeichnis des Projekts, und unter diesem Verzeichnis mehrere Dateien, die für alle Umgebungen (und einige Male separate Dateien für jede Entwicklungsumgebung), die alle verfolgten in der Quellcodeverwaltung. Und es ist die eigentliche Datei, die den code verwendet benannteconfig
an der Wurzel des Projekts. Dies ist die einzige Datei, die nicht verfolgt werden. So wie es aussieht diesesWenn jemand der das Projekt auscheckt, er kopiert die config Datei er verwenden möchte, in die unberührte
config
- Datei, und ist er frei, um es zu Bearbeiten, wie er will, ist aber auch dafür verantwortlich, kopieren Sie diese änderungen vor, die er begeht, um die weitere Umgebung der benötigten Dateien.Ist, und auf Servern, die nicht verfolgte-Datei kann einfach eine Kopie (oder Referenz) des verfolgt-Datei entspricht, die Umwelt. In JS kann man einfach 1 Zeile, zu verlangen, dass Datei.
Dieser Fluss kann ein wenig kompliziert auf den ersten, aber es hat große Vorteile:
1. Sie müssen sich nie sorgen über eine config-Datei immer gelöscht oder auf dem server geändert werden, ohne eine Sicherung
2. Das gleiche, wenn ein Entwickler hat einige benutzerdefinierte config auf seinen Rechner und seine Maschine nicht mehr funktioniert aus irgendeinem Grund
3. Vor jeder Bereitstellung können Sie den diff der Konfig-Dateien für
development
undstaging
zum Beispiel, und sehen, ob es etwas fehlt oder kaputt ist.InformationsquelleAutor Gaafar
Wir halten gerade die Produktion config-Datei überprüft. Es ist der Entwickler in der Verantwortung, die Datei zu ändern, wenn Sie ziehen Sie es aus sichere Quelle für die Bereitstellung oder Entwicklung. Diese verbrannt hat uns in der Vergangenheit, so dass ich würde nicht empfehlen es.
InformationsquelleAutor Ryan
Stand ich vor dem gleichen problem und habe eine Lösung gefunden. Ich habe zuerst alle Dateien in das zentrale repository (auch der Entwickler).
So, wenn ein Entwickler holt sich die Dateien aus dem repository der Entwickler-config ist auch da. Beim Wechsel vorgenommen, um diese Datei, Git, sollten Sie nicht bewusst sein, diese änderungen. So verpasst kann nicht geschoben werden/an das repository übergeben, sondern bleiben lokal.
Ich löste dies durch die Verwendung der git-Befehl:
update-index --assume-unchanged
. Ich machte eine bat-Datei, die ausgeführt wird, in der fertige Projekte, die mit einer Datei, deren änderungen sein sollten, ignorieren von Git. Hier ist der code den ich in die bat-Datei:In meine fertige ich würde den Aufruf der bat-Datei, zum Beispiel:
Fand ich auf SO eine bat-Datei, kopiert die richtige config-Datei für das web.config/app.config. Ich nenne diese bat-Datei in das fertige. Der code für diese bat-Datei ist:
In meine fertige ich würde den Aufruf der bat-Datei, zum Beispiel:
InformationsquelleAutor Benny Emmers