在源代码控制存储库中模拟类似符号链接的行为

时间:2009-07-17 00:14:10

标签: version-control repository commit symlink

假设我有以下(所需)文件夹结构:

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

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

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

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

我知道Perforce不能做到这一点,不需要处理3个规格。这非常复杂且容易出错,特别是当很多人这样做时。是否有源控制存储库可以做到这一点? (指向一些关于如何完成它的文档的指针是一个加号)

谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

将项目存储在一个平面目录中(每个项目一个目录,所有都在同一级别),你可能要好得多,并且使用你构建的任何系统或IDE都可以将所有内容链接在一起。