2014-07-20 18 views
10

ich ein Linux-Verzeichnis (und brauchen keine Fenster Kasse):Folgen Symlinks in SVN

/home/me/projects/project1 

In diesem Projekt muss ich SVN (1.8.8) einen Symlink "link1" folgen:

/home/me/projects/project1/link1/<some_directories_and_files> 

aber SVN lässt mich das nicht tun, es fügen sie einfach link1 aber nicht deren Inhalt. Wenn ich versuche, den Inhalt zu addieren, erhalte ich eine Fehlermeldung:

svn add link1/* 
svn: E145001: Can't schedule an addition of '/home/me/projects/project1/link1/first_directory' below a not-directory node 

versuchte ich link1 zu hart Link konvertieren, aber ich kann das nicht tun, entweder:

ln /path/to/my/linked/directory link1 
ln: ‘/path/to/my/linked/directory’: hard link not allowed for directory 

Jede Idee? Wie gehst du mit dieser Art von Konfiguration um? Ich muss nur alles von /home/me/projects/project1 von einem einfachen svn commit

Antwort

7

begehen Wenn ich Ihr Problem zu verstehen, Sie haben:

project1/ 
project1/link1 -> ../../some/where/else 

Wenn Sie eine einfache tun svn add link1 es fügt einen Symlink Eintritt in das Subversion-Repository, aber was Du versuchst es zu erreichen, indem du das Zeug irgendwo anders in den Baum bekommst.

Wenn dies der Fall ist, dann kämpfen Sie in die falsche Richtung, Sie sollten die echten Dateien und Verzeichnisse unter link1 erstellen und die Zielspeicherorte als symbolische Verknüpfungen in das link1-Verzeichnis setzen. Das wäre eine einfache Lösung für das Problem.

Eine andere Lösung wäre, den Standort ../../some/where/else einen svn-Standort in seinem eigenen Recht zu machen, und link1 eine externe Definition zu diesem Ort zu machen. Wenn Sie im Hauptverzeichnis festschreiben, werden die externen Daten zur gleichen Zeit übernommen, wodurch die Informationen gespeichert werden. Um jedoch sicherzustellen, dass der andere Speicherort synchron gehalten wird, müssen Sie sicherstellen, dass Sie ihn auf die gleiche Version wie die gespeicherten Daten aktualisieren.

In meinem Fall auf meinem Desktop habe ich ein Einstellungsverzeichnis:

$HOME/settings 

Dies ist eine ausgecheckte Kopie eines Verzeichnisses enthält .bashrc, .profile, .vimrc, .vim usw. Dateien und Ordner von einer svn Repo. Alle meine Profildateien und -verzeichnisse waren symbolische Verknüpfungen in diesen Ordner, also zum Beispiel .profile ->settings/.profile, usw. Wenn ich Änderungen vornahm, wurden sie in der SVN-Struktur widergespiegelt, auf die ich zurückgreifen kann, um sicherzustellen, dass ich das nicht tue Verliere meine Konfigurationseinstellungen, wenn ich zu einem anderen System gehe.

Wenn Sie wirklich svn folgen Symlinks als Hardlinks (Sie können nicht machen Verzeichnis Hardlinks, weil es eine schlechte Sache ™ wäre) wollen, dann werden Sie die SVN-Client Quelle hacken müssen, so dass es tat, was du wolltest; aber das wäre ein Wartungsalbtraum.

Sie könnte mit dem Machen der Symlink in eine Bindung Mount-Punkt auf das Ziel gerichtet, aber das hat seine eigenen Probleme - Sie müssten Root sein, um dies zu erreichen, und es endet lustige Einträge in Ihrem/proc/mounts, um dies zu erreichen:

mount --bind /absolute/path/to/some/where/else project1/link1 
+0

Große Antwort.Ich werde für jetzt mit der einfachen Lösung gehen. – Cyrille

+0

Oh, ich erinnerte mich gerade, warum ich es so gemacht habe (Symlink zu externem Verzeichnis innerhalb der Arbeitskopie): Ich brauchte www-data Benutzer, um Dateien in dieses Verzeichnis schreiben zu können. Da ich die Berechtigungen in meinem Home-Verzeichnis nicht bis zu meiner Arbeitskopie ändern möchte, werde ich wohl Ihre alternativen Lösungen durchsuchen müssen ... – Cyrille

+0

lol, Pete, rate mal, welcher Symlink mich hierher gebracht hat? ;-) Lass uns svn es bald verschieben! – gatopeich