Wie kann man mit TortoiseSVN einen non recursive Commit von verschobenen und umbenannten Ordnern durchführen?
- Einleitung: Problemstellung bei verschobenen und umbenannten Ordnern
- Wie TortoiseSVN normalerweise mit Ordnern und deren Unterordnern umgeht
- Was bedeutet non recursive Commit im Kontext von TortoiseSVN?
- Schwierigkeiten beim Commit von verschobenen oder umbenannten Ordnern non recursive
- Möglichkeiten zur Umsetzung eines non recursive Commits bei verschobenen Ordnern
- Fazit und Empfehlung
Einleitung: Problemstellung bei verschobenen und umbenannten Ordnern
Wenn man in einem Subversion-Repository mit TortoiseSVN arbeitet und Ordner verschiebt oder umbenennt, möchte man häufig nur diese Veränderungen und deren unmittelbaren Inhalt committen. Dabei kann es vorkommen, dass ein "non recursive" Commit vorgenommen werden soll, also ohne dass alle Unterordner und Dateien automatisch mit einbezogen werden. Dies ist beispielsweise sinnvoll, wenn man eine größere Struktur in mehreren Schritten anpassen oder testen möchte.
Wie TortoiseSVN normalerweise mit Ordnern und deren Unterordnern umgeht
Standardmäßig führt TortoiseSVN bei einem Commit eines Ordners eine rekursive Überprüfung aller darin enthaltenen Dateien und Unterordner durch. Das bedeutet, sämtliche Änderungen, auch in tiefen Ebenen, werden erfasst und in den Commit aufgenommen. Dies ist in vielen Fällen erwünscht, aber bei Umbenennungen oder Verschiebungen ganzer Ordnerstrukturen, die schrittweise durchgeführt werden sollen, kann dies hinderlich sein.
Was bedeutet non recursive Commit im Kontext von TortoiseSVN?
Ein "non recursive" Commit bedeutet, dass nur die Änderungen auf der gewählten Ordner-Ebene beachtet werden. Unterordner werden dabei nicht in den Commit aufgenommen, selbst wenn sie Änderungen aufweisen. In der TortoiseSVN-Benutzeroberfläche gab es früher die Möglichkeit, die Rekursionstiefe festzulegen (z. B. "commit depth"), um dies zu steuern. Neuere Versionen sind oft standardmäßig rekursiv.
Schwierigkeiten beim Commit von verschobenen oder umbenannten Ordnern non recursive
Bei verschobenen oder umbenannten Ordnern erkennt Subversion intern nicht einfach nur Änderungen an einem Ordner, sondern auch an den beteiligten Pfaden und deren Metadaten. Um den Zustand konsistent zu halten, ist häufig ein rekursiver Commit notwendig, da Subversion die Verschiebung bzw. Umbenennung intern als "delete" an der alten Stelle und "add" an der neuen Stelle mit History-Übernahme versteht. Ein non recursive Commit könnte Teile der Operation unvollständig oder inkonsistent lassen.
Möglichkeiten zur Umsetzung eines non recursive Commits bei verschobenen Ordnern
Wenn man dennoch versuchen möchte, nur die oberste Ebene der Veränderungen (z. B. nur die Ordner selbst ohne Unterordner) zu committen, sollte man in TortoiseSVN darauf achten, im Commit-Dialog gegebenenfalls die Tiefe der Commit-Operation richtig einzustellen. Über die Schaltfläche für "Change Depth" (oder ähnliche) kann man die Tiefe auf "Only this item" setzen. Dieses Feature ist jedoch je nach TortoiseSVN-Version unterschiedlich prominent verfügbar.
Zusätzlich kann es helfen, nicht auf Ordner-Ebene zu committen, sondern einzelne Dateien oder nur diejenigen Elemente auszuwählen, die man wirklich übertragen möchte. Das selektive Markieren im Commit-Dialog erlaubt so eine gewisse Kontrolle. Allerdings ist dies bei großen verschobenen Strukturen oft aufwendig und fehleranfällig.
Fazit und Empfehlung
Ein komplett non recursive Commit von verschobenen oder umbenannten Ordnern in TortoiseSVN ist technisch schwierig und von Subversion nicht immer vorgesehen, da die Datenbank-Operationen für Verschiebungen rekursiv sind. Für eine saubere und vollständige Versionsverwaltung empfiehlt es sich, solche Änderungen rekursiv zu committen. Soll nur partiell gesichert werden, ist es sinnvoll, einzelne Dateien oder gezielt ausgewählte Ordner zu committen und die Arbeitskopie in sinnvolle kleine Änderungssets zu unterteilen. Die Option zur Anpassung der Commit-Tiefe sollte geprüft werden, ist aber nicht in allen Versionen vollumfänglich verfügbar oder zuverlässig.
