subversion (svn) ignore

hi,

benutze für ein neues projekt subversion als versionskontrollsystem.
funktioniert ganz gut, bis auf das ignorieren.
eine datei ignoriere ich folgendermaßen:
Code:
cd trunk/settings/
svn propedit svn:ignore .
settings.php # wird in nano eingegeben und gespeichert

auch die überprüfung
Code:
svn propget svn:ignore
liefert mir dann
Code:
settings.php
zurück.

allerdings scheint das ganze überhaupt keinen effekt zu haben. wenn ich die settings.php nun bearbeite, wird sie bei
Code:
svn stat
gelistet (M settings/settings.php) und auch beim commit wird die datei mit übertragen, sodass ich die änderungen manuell wieder rückgängig machen muss.

was mache ich falsch? ich würde gerne die settings.php editieren, ohne dass sie beim commit übertragen wird (ignorieren halt)

danke schonmal
 
Vielleicht macht es einen Unterschied, wenn du das propedit aus dem Root-Pfad deines SVN ausführst, also 'svn propedit trunk/settings/' und dann erst die settings.php definierst. Nur eine Vermutung, bin nicht wirklich mit SVN vertraut. Mit GIT ist das scheinbar viel einfacher ;)
 
was mache ich falsch? ich würde gerne die settings.php editieren, ohne dass sie beim commit übertragen wird (ignorieren halt)

Dateien, die sich bereits unter SVN Versionskontrolle befinden, können nicht ignoriert werden.

Workaround:

cp <datei> /tmp
svn delete <datei>
svn ci -m ''
cp /tmp/<datei> .
svn propset svn:ignore '<datei>' .
svn ci -m 'new ignore'

HTH

Micha
 
Mit GIT ist das scheinbar viel einfacher ;)

Nö. ;)

Git zeigt da das gleiche Verhalten. Wenn die Datei schon von Git verwaltet wird, wird sie trotz Hinzufügen in ".gitignore" weiterhin beachtet. Du musst "git rm --cached <Datei>" ausführen, um die Datei im Verzeichnisbaum zu behalten und sie dann ignorieren.

Micha
 
Speichere einen Prototyp der Configdatei (z.B. settings.php.default) in der Versionsverwaltung und stelle die echte Configdatei in das ignore-File.
 
aber beim commit wird doch die <datei> auf dem server gelöscht, was ungünstig wäre

Wenn du die Datei unter Versionskontrolle halten willst, kannst du sie eben nicht ignorieren. Pest oder Cholera...such dir was aus. ;)

http://svnbook.red-bean.com/nightly/de/svn-book.html#svn.advanced.props.special.ignore
Die Untersstützung für ignorierbare Dateimuster in Subversion erstreckt sich lediglich auf die einmalige Handlung, unversionierte Dateien und Verzeichnisse unter Versionskontrolle zu stellen. Sobald ein Objekt unter Kontrolle von Subversion ist, haben die Ignorier-Muster keine Auswirkungen mehr auf das Objekt. Mit anderen Worten: erwarten Sie nicht, dass Subversion die Übertragung von Änderungen verhindert, die Sie an einer versionierten Datei vorgenommen haben, nur weil der Name dieser Datei auf ein Ignorier-Muster passt - Subversion beachtet stets alle seine versionierten Objekte.
HTH

Micha
 
Nicht dran gedacht, daß die Datei schon unter der Versionskontrolle steht... wieder was gelernt ;)
 
Git zeigt da das gleiche Verhalten. Wenn die Datei schon von Git verwaltet wird, wird sie trotz Hinzufügen in ".gitignore" weiterhin beachtet. Du musst "git rm --cached <Datei>" ausführen, um die Datei im Verzeichnisbaum zu behalten und sie dann ignorieren.
Doch. Wenn du eine Datei lokal änderst, musst du sie nicht in einen Commit packen („git add“) und kannst alle Änderungen bis auf die an dieser einen Datei committen („git commit“ und nicht „git commit -a“, vorher halt alle gewünschten Änderungen „git add“-en). Das heißt, du kannst die Konfigurationsdatei lokal bearbeiten, aber die Änderung nur im Working Tree haben. In SVN musst du, wenn du committest, gleich alle Änderungen im Working Tree seit dem letzten Commit committen - oder garnichts. Das ist m.E.n. das Problem, der Threadersteller ansprach und das ich auch schon oft hatte (und einer der vielen Gründe ist warum SVN beschissen ist und Git rockt, um es mal deutlich zu sagen).

Kann aber auch sein, dass mein SVN-Wissen zu beschränkt ist, und ich kenne das gesuchte Feature nur nicht.

P.S.: Die Konvertierung und Migration von SVN zu GIT ist dank „git svn“ absolut einfach und erspart dir (aufaddiert) Tage deprimierter und wütender Zeit in deinem künftigen Leben.
 
Zuletzt bearbeitet:
Datei als Kopie anlegen und auf dieser Kopie arbeiten. Es ist doch wohl logisch, dass eine Versionsverwaltung auch die Dateien tracken will, die aus dem Repository ausgecheckt wurden. Ignore greift daher nur bei Dateien, die noch nicht im Repository sind. Was ausgecheckt und geändert wurde, muss auch wieder eingecheckt werden. So einfach. Dass GIT dies nicht so handhabt, hat mich schon immer aufgeregt. Flexibilität hin oder her, aber wenn die Entwickler keine ausreichende Disziplin an den Tag legen, sorgt es ständig nur für Probleme, wenn irgendwer seine Änderungen nur teilweise eincheckt, weil er irgendwelche Dateien in Ausnahmelisten gepackt hat. Ich sehe das daher nicht als Schwäche von Subversion sondern als Schwäche von Git. Eine Versionsverwaltung soll schliesslich auch für konsistente Daten sorgen, wo alles, was zu einer Version gehört, auch zusammen gehalten wird. Git kann dies nicht, weil es ermöglicht an der Versionsverwaltung vorbeizuarbeiten. Wie man sowas als Feature darstellen kann, ist mir rätselhaft. Für mich ist das ein Bug.
 
Komplette Commits die pauschal mal alles einchecken sind sowieso sehr gefährlich. Da übersieht man mal schnell eine kleine Änderung am Code zu Testzwecken oder so.
Gerade bei solchen Sachen zeigen halt Tools wie z.B. TortoiseSVN (wenn man nicht eh mit Eclipse oder so arbeitet) ihre Stärke. Da brauch ich nicht versuchen irgendeine Datei in irgendwelche Ignorelists zu packen, ich mach einfach das Häckchen vorm Commit weg. Fertig 8)
 
Zurück
Oben