如何svn项目的版本控制包含代码和数据文件

时间:2012-04-27 22:50:31

标签: svn

我正在考虑如何适当地控制与自然语言处理相关的项目,脚本程序(Perl,Shell等)操纵文本文件。脚本通常将文本数据文件作为输入读取,进行一些处理,并再次将结果作为文本文件输出。所以有很多代码和数据文件,都是文本格式。

显然,我只是版本控制代码文件,因为数据文件可能很大。我需要维护代码的分支,以尝试不同的方法。

(1)我目前的版本控制解决方案是将代码和数据文件混合在一个目录“proj”的同一级别中:

code1,...,codem,data1,...,datan

使用分支时,我需要检查“proj”下“branchi”中的所有文件,但不要检查“branchi”子文件夹中的所有文件,以保持上述“平面”目录结构。

我当前解决方案的优点是最小的目录转换开销。由于代码和数据位于同一目录中,因此调用脚本和查看结果涉及的“cd”数量最少:

script1数据输入数据输出

vi dataout

缺点是当代码和数据文件的数量增加时,在“proj”文件夹中面对一长串文件看起来很乱。

(2)另一种方法是将代码和数据放在不同的目录下:

“proj / src”和“proj / data”。

利弊与解决方案(1)正好相反。优点是我可以获得更清晰的目录结构。缺点是我需要在调用脚本或查看结果时执行大量目录转换:

script1 ../data/data-in ../ data / data-out

vi ../data/data-out或cd ../data; vi数据输出

如果在src文件夹中。所以数据文件“../data”的额外父路径带来了大量的目录转换麻烦,特别是当需要进行大量快速实验和检查结果时。

你还有其他建议吗?感谢。

1 个答案:

答案 0 :(得分:2)

第二种方式 - 在下面用自己的数据/ src分开项目。

您可以轻松使用脚本,符号链接和别名,以方便您处理任何事情。

但是如果你在Svn中的目录布局是一个混乱的巨大球,那么你会发现当它变得太乱时很难解开。

所以你的布局可能如下所示:

/sources/
    /project1/
        script-for-proj-1
        other-stuff-for-proj-1
        data-for-proj1              --> /data/dataset24
    /project2/
        script-for-proj2
        other-stuff-for-proj-2
        data-for-proj2              --> /data/dataset23

此处,/sources中的所有内容都存在于Subversion中。 每个项目目录都有符号链接到它需要的数据目录。 但所有数据实际上都存在于/data中,并使用存档/维护 无论什么工具都有意义。

该系统的另一个优点是虽然数据没有版本化, 符号链接是,因为您的项目需要不同的输入,您可以跟踪 他们正在使用什么。