共享未打开的文件,而不是获取所有内容的本地副本

时间:2018-01-24 06:21:08

标签: version-control perforce

我想知道是否有任何修订控制系统,当用户检出/获取/创建工作区时,它将为文件创建符号链接,而不是所有内容的本地副本。一旦我们“编辑”了一个文件,它就会用一个本地副本替换符号链接。

为了更清楚,让我们说我们有一个这样的存储库:

proj/
    data/
        big_data.csv
    src/
        script.py

用户主要使用script.py,但数据文件夹的大小很大。如果每个用户都保留big_data.csv的本地副本,则会占用大量磁盘空间。如果修订控制系统保留每个文件的每个版本的副本,那么我们所需要的只是一个链接。用户不需要保留本地副本,除非他们必须编辑该文件。

proj/
    data/
        @big_data.csv -> /depot/proj/data/big_data.csv#5
    src/
        script.py

那么哪些版本控制工具有这样的功能?是否有可能在perforce中获得类似的东西?

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将符号链接检入Perforce软件仓库,它可以指向您喜欢的任何位置(我假设在这种情况下,您将拥有该文件所在的只读共享网络文件管理器),但是当您{{ 1}}你只需编辑符号链接指向的位置。

我可以设想一种在Perforce中使用流设置它的方法(你可以使用经典分支和模板客户端来实现它,但是流使它变得更容易)。

你有一个流(我们称之为p4 edit),其中dw是实际文件,一个流(我们称之为big_datadr是符号链接,big_data被指定为big_data路径,因此更改不会在两者之间合并。

isolate上有一个后台脚本(可能是change-commit触发器),它将dw/big_data的每个修订版作为唯一的只读文件写入文件管理器,然后编辑并提交{ {1}}创建指向文件管理器修订的符号链接修订。因此,用户同步dw/big_data将获得(通过符号链接)dr/big_data的匹配修订版。 dr/big_data被设置为只读(通过dw/big_data)给所有普通用户,以确保没有人意外地对其进行编辑;它需要由将其与文件管理器绑定的脚本严格管理。

因此,不想编辑dr/big_data的用户使用p4 protect流;他们可以将big_data同步到他们想要的任何修订版本,并且它的行为正常,但是他们无法编辑它。流中的其他文件(例如dr)是普通文件,他们可以正常编辑它们。

如果用户想要修改big_data,他们会script.py和所有重新同步(对于大多数文件,这可能是无操作),现在big_data是正常的可编辑状态文件。当他们向其提交新版本时,触发器会触发,一秒钟后会出现匹配的p4 switch dw符号链接,因此big_data分支中的用户会在同步时看到更改。 (每个修订版的一个符号链接修订版本使您仍然可以获得版本控制的好处; dr/big_data仅在您同步到新的符号链接版本时更新。如果您不想要此行为,您可以忽略保留文件Perforce和符号链接直接进入文件管理器并直接在那里进行编辑,但我认为你需要对它进行实际的版本控制。)一旦完成编辑,它们就可以自由dr并返回只读符号链接(其头部修订版现在将引用他们刚刚提交的修订版)。

big_datap4 switch dr的父级,反之亦然,以及它如何适合代码层次结构的其余部分,留给读者练习 - 这取决于您是否需要在多个代码行中对dr进行编辑,或者是否具有线性“主”历史记录就足够了。