我正在考虑如何适当地控制与自然语言处理相关的项目,脚本程序(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”的额外父路径带来了大量的目录转换麻烦,特别是当需要进行大量快速实验和检查结果时。
你还有其他建议吗?感谢。
答案 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
中,并使用存档/维护
无论什么工具都有意义。
该系统的另一个优点是虽然数据没有版本化, 符号链接是,因为您的项目需要不同的输入,您可以跟踪 他们正在使用什么。