【问题标题】:Symbolic link in svn working copy for a switched directory用于切换目录的 svn 工作副本中的符号链接
【发布时间】:2013-03-26 19:34:23
【问题描述】:

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

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

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

我做了什么

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

现在的问题

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

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

约束

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

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

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

问题

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


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

【问题讨论】:

    标签: svn switch-statement symlink working-copy


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 嗯,在这个解决方案中,svn:ignore 可以存储在工作副本 only中吗?未提交到存储库? (因为我不应该改变我 [数百] 同事的工作流程。)
    • 我知道有一个每个用户的忽略设置,这可能是合适的,stackoverflow.com/questions/52398/ignore-svn-ignore-possible
    • 数百名同事?哇。那么,将其作为一个组织范围的解决方案是否值得提出呢?我认为global-ignores 指令可能是一个可行的解决方案。即使您有其他具有相同文件夹名称的项目(应该是存储库的一部分),一旦您明确添加它们,它们也会正常工作。
    猜你喜欢
    • 1970-01-01
    • 2012-02-03
    • 2011-06-16
    • 2013-01-11
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多