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

如何在项目的svn版本控制中同时包含代码和数据文件,svn,Svn,我正在考虑如何通过脚本程序(Perl、Shell等)操作文本文件,适当地控制与自然语言处理相关的项目的版本。脚本通常读取文本数据文件作为输入,进行一些处理,然后将结果再次作为文本文件输出。所以有很多代码和数据文件,都是文本格式的 显然,我只需要版本控制代码文件,因为数据文件可能很大。我需要维护代码的分支,用不同的方法进行实验 (1) 我目前的版本控制解决方案是在同一个目录“proj”的同一级别混合代码和数据文件: 代码1,…,代码M,数据1,…,数据N 在处理分支时,我需要签出“proj”下“b

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

显然,我只需要版本控制代码文件,因为数据文件可能很大。我需要维护代码的分支,用不同的方法进行实验

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

代码1,…,代码M,数据1,…,数据N

在处理分支时,我需要签出“proj”下“branchi”中的所有文件,但不签出“branchi”子文件夹中的所有文件,以保持上述“平面”目录结构

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

脚本1数据输入数据输出

vi数据输出

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

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

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

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

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

vi./数据/数据输出或cd./数据;vi数据输出

如果在src文件夹中。因此,数据文件“./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
中,并使用 无论使用什么工具都有意义

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

很有趣。根据您的建议,避免cd的一种方法是为数据文件夹中的所有脚本创建符号链接,然后我可以像处理代码和数据一样处理数据文件夹。但我的上述方法仍然不完善。它将代码部分分离以便于版本控制。然而,它仍然将代码和数据的符号链接混合在一起,这可能看起来很混乱。有没有办法更好地分离代码和数据,同时又需要最少的目录转换,特别是当代码和数据都可以有多级目录时?@Fashandge-请参阅编辑部分以获得完整答案感谢您的详细阐述。听起来不错,它使svn变得简单和干净。但我仍然需要面对同一文件夹中大量的脚本和指向数据的符号链接。另一方面,如果我不将数据的符号链接放在同一个文件夹中,我将支付目录更改的额外费用。