0

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

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

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

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

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

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

script1 数据输入数据输出

vi 数据输出

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

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

“项目/src”和“项目/数据”。

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

脚本1 ../data/data-in ../data/data-out

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

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

你有什么其他的建议?谢谢。

4

1 回答 1

2

第二种方式 - 将项目与他们自己的 data/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,并使用任何对此有意义的工具进行存档/维护。

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

于 2012-04-27T22:54:09.173 回答