2014-07-20 27 views
10

我有一个linux目录(并且不需要任何窗口结账):跟随符号连接在SVN

/home/me/projects/project1 

在这个项目中,我需要SVN(1.8.8)遵循符号链接“链接1”:

/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 

我试图转换链接1硬链接,但我不能这样做,或者:

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

回答

7

承诺的一切,你有:

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

如果你做一个简单的svn add link1它增加了一个符号链接进入到颠覆存储库中,但什么你试图完成的是将其他地方的东西放到树中。

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

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

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

$HOME/settings 

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

如果你真的想SVN遵循符号链接为硬链接(你不能让目录的硬链接,因为这将是一个坏事™),那么你就必须破解svn客户端源,使得它做了什么你自找的;但这将是一场维护噩梦。

可能脱离使符号链接成为一个绑定挂载点直接指向目标,但它有它自己的问题 - 你需要是root来完成这一点,它最终会留下有趣的条目/ proc/mounts来完成这个:

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

很好的答案。现在我将使用简单的解决方案。 – Cyrille

+0

哦,我只记得为什么我这样做(符号链接到工作副本内的外部目录):我需要www-data用户能够在这个目录中写入文件。由于我不想将我的主目录中的权限更改为我的工作副本,所以我想我将不得不浏览您的替代解决方案... – Cyrille

+0

大声笑,皮特,猜猜哪个符号链接将我带到这里? ;-)让我们迅速移动它! – gatopeich