10

我在 Linux 系统上有一个目录,该目录主要包含指向不同文件系统上文件的符号链接。我想将目录添加到 Subversion 存储库,取消引用过程中的符号链接(将它们视为它们指向的文件,而不是链接)。一般来说,我希望能够处理具有这种行为的任何工作副本操作,但我认为“svn add”命令是它开始的地方。

SVN 客户端实用程序似乎没有与工作副本中的符号链接取消引用相关的任何选项。我也没有在手册( http://svnbook.red-bean.com/en/1.5/index.html)中找到对此的任何引用。

我在 SVN 用户邮件列表上找到了一个发帖者,他提出了同样的问题但从未收到答案,这里:

(该海报最终使用硬链接而不是符号链接。在我的情况下,这种技术不是一种选择,因为真正的底层文件位于单独的文件系统上。)

我在 Fedora 11 上使用 Subversion v1.6.1。

对于它的价值,我知道有替代工具/技术可以帮助近似这种行为,但由于各种原因我不得不放弃。我已经考虑过[和尘封]这些可能性: - “联合”挂载,合并所有包含真实文件的目录,SVN 工作副本目录作为联合中的“顶层”层;- 将真实文件复制/移动到与 SVN 工作副本相同的文件系统,并使用硬链接而不是符号链接;- 非 SVN 版本控制系统。这些都是很好的想法,我相信它们是解决其他问题的好方法,但考虑到这种环境和情况的限制,它们不会起作用。

4

5 回答 5

1

你有很多限制,但有一件事总是有效的:破解源代码。

您可以轻松地为 linux 构建自己的 svn,尽管制作这个 mod 可能会也可能不会“容易”。无论如何,如果您没有任何托管的符号链接,您可以进行粗略的破解,让 svn 始终跟随它们,就好像它们是硬链接一样。

如果您的存储库确实包含版本化链接,并且您需要检查其中的那一部分,那么您将需要一个更复杂的 hack,例如,使用一个属性来控制每个文件或每个层次结构或其他东西的特性。

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

于 2009-09-04T18:47:01.857 回答
0

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

于 2010-09-22T15:05:41.763 回答
0

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

于 2010-03-28T18:05:04.470 回答
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”分支,其中包含我组织的脚本。PS:有了shell功能,我也可以根据需要签入和签出。

于 2013-02-21T00:00:03.567 回答
0

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

于 2010-09-21T12:09:42.557 回答