【问题标题】:Emulating symlink-like behaviour in a source control repository在源代码控制存储库中模拟类似符号链接的行为
【发布时间】:2010-11-11 13:46:11
【问题描述】:

假设我有以下(期望的)文件夹结构:

*CommonProject
*Project#1
----> CommonProject(link)
*Project#2
----> CommonProject(link)

CommonProject 是属于该项目的源的位置,CommonProject(link) 只是到主位置的软链接。如果我们把它想象成可视客户端中的树视图,如果我展开 Project#1,我将在那里看到 CommonProject 作为一个子目录,即使文件实际上并没有存储在那里。

这样做的目的是启用以下行为:

当我签出 Project#1 时,我得到了与该项目相关联的文件以及包含其所有文件的子文件夹 CommonProject(好像 Project#1 包含版本控制存储库)。现在,如果我要在 Project#1 中修改 CommonProject 的文件并将我的更改提交到存储库,则更改将进入 CommonProject 位置(实际上没有文件存储在存储库中的 Project#1 下本地)。现在,如果我要同步 Project#2,因为它还包含指向 CommonProject 的符号链接,它现在将获得我的更新。 本质上,文件的重复只存在于我的机器上,但在存储库中只有一个版本的 CommonProject。

我知道 Perforce 无法做到这一点,除非同时兼顾 3 个规范。这是非常复杂且容易出错的,尤其是当很多人都这样做时。是否有源代码控制存储库可以做到这一点? (指向一些关于如何完成的文档的指针是一个加号)

谢谢。

【问题讨论】:

    标签: version-control repository commit symlink


    【解决方案1】:

    Subversion 可以直接将符号链接存储在存储库中。这仅适用于支持符号链接的操作系统,因为 svn 只是以与任何其他文件相同的方式存储符号链接。

    我认为您真正想要的是链接到单独的项目。 Subversion 通过externals 和 git 通过submodules 支持这一点。另一种选择是在构建过程中管理此类事情,以便在初始化构建时收集一些静态资源。通常,更新经常更改的实用程序库会导致稳定性问题,因此您可以在需要时手动(或使用巧妙的脚本)执行此操作

    【讨论】:

    • 我可能读错了,但听起来它实际上将一个符号链接文件放入存储库,所以当我签​​出 Project#1 时,我会得到一个指向 CommonProject 文件夹而不是完整副本的链接在 Project#1 文件夹下(Windows 兼容性也很重要)
    • 非常好,颠覆中的外部看起来像我想要的(至少来自文档),我将设置测试环境来测试它。然而,Git 子模块并没有那么好。他们将原始副本和集成副本保留为 2 个单独的副本,并且需要手动(或脚本化)内务管理以保持同步(这个漏洞是我不需要做额外的工作,并且每个使用 CommonProject 的项目都会自动同步)。谢谢你的回答。
    • Subversion 支持符号链接,但在 Windows 下不支持(Windows 从 Vista 开始完全支持符号链接和硬链接)。 tortoisesvn.net/node/293 上有一个功能请求,但页面是静态的。如果您对此感兴趣,您应该尝试通过添加评论来说服开发团队tortoisesvn.tigris.org/ds/…
    【解决方案2】:

    您最好将项目存储在一个平面目录中(每个项目 1 个目录,都在同一级别),然后使用您构建的系统或 IDE 将所有内容链接在一起。

    【讨论】:

      猜你喜欢
      • 2019-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-24
      • 2011-08-25
      • 2023-02-10
      • 2017-07-12
      相关资源
      最近更新 更多