遵循SVN中的符号链接

时间:2014-07-20 13:13:19

标签: linux svn symlink ln symlink-traversal

我有一个linux目录(并且不需要任何Windows结帐):

/home/me/projects/project1

在这个项目中,我需要SVN(1.8.8)来跟踪符号链接" link1":

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

但SVN不允许我这样做,它只是添加link1而不是其内容。如果我尝试添加其内容,我会收到错误:

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

我尝试将link1转换为硬链接,但我也不能这样做:

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

有什么想法吗?你如何处理这种配置?我只需要提交/home/me/projects/project1来自简单svn commit

的所有内容

1 个答案:

答案 0 :(得分:8)

如果我理解你的问题,你有:

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

如果你做一个简单的svn add link1,它会在subversion存储库中添加一个符号链接条目,但是你要完成的是将其他东西放到树中。

如果是这种情况,那么你正朝着错误的方向奋斗,你应该在link1下创建真实的文件和目录,并将目标位置符号链接放到link1目录中。这将是解决问题的简单方法。

另一个解决方案是将位置../../some/where/else置于其自身的svn位置,并使link1成为该位​​置的外部定义。当您在主目录中提交时,外部将同时提交,这将实现存储信息;但是为了确保其他位置保持同步,您必须确保将其更新为与存储数据相同的版本。

就我而言,在我的桌面上,我有一个设置目录:

$HOME/settings

这是包含.bashrc.profile.vimrc.vim等文件和文件夹的目录的已检出副本svn个回购。我的所有个人资料文件和目录都是符号链接到此文件夹中,例如.profile - &gt; settings/.profile等。当我进行更改时,它们会反映在svn树中,我可以提交回来,以确保在我转到另一个系统时不会丢失配置设置。

如果你真的希望svn遵循符号链接作为硬链接(你不能制作目录硬链接,因为它会是坏事™),那么你将不得不破解svn客户端来源所以它做了你想要的;但这将是一场维护噩梦。

可以让符号链接成为一个指向目标的绑定挂载点,但这有它自己的问题 - 你需要成为root来完成这个,它最终会离开/ proc / mounts中的有趣条目可以实现此目的:

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