Subversion客户端(svn)能否像文件一样解引符号链接?

10
我在一个Linux系统上有一个目录,其中大部分是指向不同文件系统上的文件的符号链接。我想将该目录添加到Subversion存储库中,在此过程中取消符号链接(将它们视为所指向的文件而不是链接)。一般来说,我希望能够处理任何具有此行为的工作副本操作,但我认为'svn add'命令是其开始的地方。
SVN客户端实用程序似乎没有与工作副本中符号链接取消关联的选项。我也没有在手册中找到任何相关的参考资料(http://svnbook.red-bean.com/en/1.5/index.html)。
我在SVN用户邮件列表上发现了一个发布者提出了相同的问题,但从未收到答案,地址如下: -http://markmail.org/message/ngchfnzlmm43yj7h (那个发布者最终使用硬链接而不是符号链接。在我的情况下,这种技术不是选择,因为真正的基本文件驻留在单独的文件系统上。)
我正在Fedora 11上使用Subversion v1.6.1。
值得一提的是,我知道有替代工具/技术可以帮助近似这种行为,但出于各种原因必须舍弃它们。我已经考虑过并且丢进了垃圾箱中的所有可能性是: -一个“联合”挂载,将包含实际文件的所有目录合并,在联合中,SVN工作副本目录是“顶层”; -将实际文件复制/移动到与SVN工作副本相同的文件系统中,并使用硬链接而不是符号链接; -非SVN版本控制系统。 这些都是好主意,我相信它们是其他问题的有效解决方案,但在这种环境和情况下,它们无法起作用。

我认为这是不可能的(我也不认为任何版本控制系统可以做到这一点,它要么遵循符号链接但无法跟踪它们,要么跟踪它们但不遵循)。 - tonfa
看起来是这样。这似乎很愚蠢,因为大多数操作路径结构的实用程序(cp、mv、ln、rm、rsync)都有选项可以指定符号链接应该被解除引用,而不是按字面意义处理。我的意思是,只有我这么认为吗?缺少“解除引用”选项会减少工具的功能吗?(如果我是唯一一个这样想的人,我可能不会提交一个特性请求到SVN项目。) - Ryan B. Lynch
三年晚了,但你并不孤单。我也需要这个。 - Robert Muil
5个回答

1

你有很多限制,但有一件事情总是有效的:黑客攻击源代码。

你可以轻松地为Linux构建自己的svn,尽管这个修改可能很容易或者不容易。无论如何,如果你没有任何受控符号链接,你可以进行一个简单的黑客攻击,并让svn始终跟随它们,就像它们是硬链接一样。

如果你的存储库包含版本化的链接,并且你需要检出其中的部分,则需要更复杂的黑客攻击,例如使用控制每个文件或层次结构的特性属性。

还有另一种选择:版本化链接出现在1.1.0中,如果之前的行为是跟随符号链接,那么也许你可以运行旧的客户端。


那么,你的意思是我的实际问题(SVN客户端能否做到)的答案是“不行”。对吗? - Ryan B. Lynch
1
没错,我的意思是“不行,至少从1.1.0版本开始可能之前也不行”。我猜你已经考虑过添加其他文件系统树,然后只保留本地未版本化的符号链接。这似乎很好用,但需要多次提交或更新才能同步整个工作副本。(但在没有本地链接的其他工作副本上不需要) - DigitalRoss

0
想法:使用LD_PRELOAD注入共享库,拦截stat/open/unlink等操作,以便svn不会看到符号链接。这将使您无需修改svn源代码。

0

我遇到了一个类似的挑战。我的主目录中包含许多散布在各个子目录中的脚本~/scripts。然而,我希望在SVN中有一个更清晰的布局,以方便同事们浏览寻找代码示例。

我创建了一个~/scripts/svn/signal15/code/目录,并在其下创建了prodtest子目录,然后硬链接了其他位置散布的所有脚本。

接下来的命令导入了我需要的目录/文件布局;

cd ~/scripts ; svn import svn http://svn_server/repos/code

现在仓库显示为http://svn_server/repos/code/signal15/,包含了"prod"和"test"子目录。

现在我有了自定义布局; a) 我的主目录布局保持不变(除了~/scripts/svn子目录) b) SVN仓库中包含一个名为"signal15"的分支,其中包含了我组织好的脚本。 附注:借助一个shell函数,我还可以根据需要进行签入和签出操作。


0

你也可以使用物理链接而不是符号链接。


0
据我所知,使用当前的Subversion版本(1.6.x),没有办法做到这一点。如果是在同一文件系统上的文件(而不是目录),您可以使用硬链接(在ln命令中不带-s开关)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接