0

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

当检出多个副本时,我想在我的工作副本中执行相同的操作,从而避免重新下载我已经拥有的相同 GB 的二进制数据。

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

我做了什么

我所做的是检查项目 A,执行 switch -es; 然后检查项目 B,而不是常规开关, do ,所以项目 Bsvn switch --set-depth=empty --ignore-ancestry http://foobar的这个工作副本知道它应该指向哪里。然后,我做了和。(1)mv foobar old_foobarmklink /D foobar ../project_A/foobar

现在的问题

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

我也使用 TortoiseSVN,它将图标覆盖显示为黄色三角形“!” (意思可能是冲突的?),但我在“foobar”中没有实际冲突(也没有树冲突)svn status,如果我svn up在“foobar”中这样做,它表示它是最新的。

约束

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

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

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

问题

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


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

4

1 回答 1

1

我们有一种情况,多个项目可能相互嵌套。

我们使用的解决方案可能对您很有效;

  1. 对于一个项目,照常将其从存储库中检出。
  2. 为将包含数据的路径创建一个svn:ignore条目,并确保不跟踪该路径。
  3. 查看该路径的数据。
  4. 对于其他项目,请执行第 1 步和第 2 步,但要创建符号链接。

现在你所有的项目都会忽略那些额外的文件,但你仍然可以通过 svn 管理数据。

是的,这意味着您需要记住svn update && svn update data/确保您的项目完全是最新的,但这并不麻烦。

于 2013-07-17T06:13:06.730 回答