8 Stimmen

SVN Atomic Commit - Anleitung

Wo ich bin: Linux-Kommandozeile

Das Problem, das ich jetzt habe:

Manchmal konnte ich keine atomaren Übertragungen vornehmen (d. h. alle Änderungen, die für ein bestimmtes Ticket/eine bestimmte Aufgabe erforderlich sind), weil wir einige Dateien im Repository haben, deren Inhalt in den lokalen Entwicklungsumgebungen variiert.

Zum Beispiel: database.xml (dbname, Benutzername, Passwort, usw.). Ich ändere diese Datei in meiner lokalen Umgebung, und jedes Mal, wenn ich eine Übergabe/einen Checkin durchführen muss, muss ich alle erforderlichen Dateien/Ordner für die Übergabe manuell auflisten (mit Ausnahme dieser lokal geänderten Dateien).

Vielleicht ist es eine falsche Designentscheidung und database.xml muss aus dem Repository gelöscht und für database.xml.template (in SVN gespeichert), so dass diese Datei nicht in die Übergabe einbezogen wird, bis Sie manuell svn add für sie? Vielleicht ist es der falsche Ansatz, all diese umgebungsabhängigen Informationen im Repository zu speichern - in diesem Fall können wir alles kaputt machen, wenn wir zum Beispiel eine geänderte Konfiguration committen.

So wie ich es verstehe, svn:ignore Eigenschaft kann in dieser Situation nicht helfen, da sie nur für Dateien verwendet werden kann, die nicht im Repository gespeichert sind.

Wie kann dieses Problem gelöst werden?

P.S.: Ich benutze Ubuntu und meist reine Kommandozeile für SVN.

8voto

FryGuy Punkte 8474

Die "Standard"-Vorgehensweise dafür ist in etwa so (verzeihen Sie die SVN-Syntax, ich habe Basar in letzter Zeit):

echo config > database.xml.template
svn add database.xml.template
svn ignore database.xml
svn commit

Dann auf der Entwicklungsmaschine der einzelnen Personen:

svn checkout
cp database.xml.template database.xml
...edit database.xml...

Und wenn sie sich verpflichten,

echo foo > someotherfile
svn commit

die database.xml Datei wird nicht zu Subversion hinzugefügt.

6voto

Lasse V. Karlsen Punkte 364542

Sie sollten eine Vorlage im Repository speichern, aber nicht die eigentliche Datei, die Sie lokal ändern müssen.

Auf diese Weise können Sie bei Bedarf eine unberührte Datei wiederherstellen, ohne zu riskieren, dass eine Datei im Repository gespeichert wird, die dort nicht sein sollte.

Und nein, svn:ignore wird Ihnen hier nicht helfen.

0voto

Thorsten Schöning Punkte 2980

Meine 2 Cents: Zuallererst müssen Sie sicherstellen, ob es eine (einfache) Möglichkeit gibt, die Pfade für alle an Ihrem Projekt beteiligten Entwickler zu harmonisieren. Das kann die gleiche relative Verzeichnisstruktur oder eine dünne Schicht in Ihrer Anwendung sein, die einige Shell-Variablen oder ähnliches wie $home, %USERPROFILE% usw. unterstützt. Dies wäre im Laufe der Zeit viel bequemer, als wenn sich jeder Entwickler mit seiner eigenen, nicht versionierten Konfiguration befassen müsste, und das ist es, was IDEs ebenfalls zu bieten versuchen.

Im Allgemeinen ist die Versionierung von Konfigurationsdateien für mich völlig in Ordnung, es ist einfach die Zeit, die ein Entwickler damit verbracht hat, Dinge einzurichten, und sollte nicht aus Versehen verloren gehen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X