svn工作副本中的符号链接,用于交换目录

时间:2013-03-26 19:34:23

标签: svn switch-statement symlink working-copy

我在一个仓库中处理非共享 - 祖先的几个(2-20)项目,它们只在一个地方共享存储在存储库中的二进制数据GB的公共资源。这些项目利用svn switch将相应的文件夹映射到共享二进制数据的单个svn URL。

我希望在我的工作副本中执行相同操作时检查多个,这样就可以避免重新加载我已经拥有的相同GB的二进制数据。

(注意:另一个坏消息是项目还使用svn 1.7可执行文件来修改自己。)

我做了什么

我所做的是检查项目A ,做开关-es;然后查看项目B ,但不是常规切换,而是执行svn switch --set-depth=empty --ignore-ancestry http://foobar,因此项目B 的这个工作副本知道应该指向的位置。然后,我做了mv foobar old_foobarmklink /D foobar ../project_A/foobar。 (1)

现在的问题

现在的问题是,如果我使用符号链接在wc中svn status,它会将“foobar”中的所有文件列为非版本化(?状态)。

我也使用TortoiseSVN,它将图标叠加显示为黄色三角形“!” (意思是可能会被混淆?),但我在svn status中没有实际冲突(也没有树冲突),如果我在“foobar”中svn up,则表示它是最新的。< / p>

约束

二进制文件容器不会经常更改,即使这样做,更改通常也是向后兼容的。因此,工作副本对其中的文件版本有错误的想法(至少对我而言)不是问题。

我应该更改项目或回购结构,因为我不允许“正式”这样做。

我使用svn 1.7 ,因为项目实际上使用了一个自包含的svn可执行二进制文件来处理自己的工作,所以如果可能,我想坚持下去。

问题

有没有办法利用符号链接(或其他任何东西)以避免在我的硬盘上复制相同的GB数据? (如果可能,也避免下载。)


(1):我在Windows上;为了简单起见,假设我文件系统中的 ,文件夹“project_B”和“project_A”是邻居,即。共享一个共同的祖先,该文件夹foobar在两个项目中都是顶级。

1 个答案:

答案 0 :(得分:1)

我们遇到多个项目可能互相嵌套的情况。

我们使用的解决方案可能适合您;

  1. 对于项目,请将其从存储库中正常检查。
  2. 为包含数据的路径创建svn:ignore条目,并确保不跟踪该路径。
  3. 查看该路径的数据。
  4. 对于其他项目,请执行步骤1和步骤2,但改为创建符号链接。
  5. 现在您的所有项目都会忽略这些额外的文件,但您仍然可以通过svn管理数据。

    是的,这意味着您需要记住svn update && svn update data/以确保您的项目完全是最新的,但这并不是一件容易的事。