保存和管理所有版本的程序及其相关数据的好方法是什么?

What are good ways to save and manage all versions of programs and their associated data?

我正在做一个研究项目,我需要做的是修改程序(或编写新脚本)并生成数据。我想保存所有版本的程序和数据,以便我可以轻松地同时比较不同版本的程序数据对。

有一些我以前用过的方法:

  1. 手动管理所有东西:每次修改程序之前,我都会将未修改的版本和相关数据复制到一个文件夹中,然后修改和运行新程序。这可行,但不方便,有时我忘记执行此复制和粘贴步骤并丢失了一些版本。

  2. Git:这对版本控制有好处,但不便于直接比较不同版本的程序和数据,因为Git并没有保存所有版本同时(例如,很难比较程序和数据的版本 1、3、7、14)。

我想知道是否有其他方法可以保存和管理所有版本的程序及其相关数据?顺便说一句,我一半的时间花在 Windows 上,另一半时间花在 Linux.

提前致谢!

从您的问题中不能完全清楚您将在程序的不同版本生成的数据之间进行什么样的比较。但是,如果我假设目标是让您的计算结果在版本之间保持不变,那么您可能正在寻找的解决方案是 (a) 版本控制和 (b) 单元测试的组合。

使用 git 的版本控制允许您在 "known good states." 提交代码 在提交之前您知道状态是 "good" 的方式是通过 运行 一系列您编写的单元测试。如果更改不会导致任何单元测试失败,那么您假设没有任何问题,然后您提交。如果您在代码中发现错误,您会编写一个单元测试,但由于该错误而失败,然后编写一个 "patch" 来修复该错误并使测试通过。如果错误再次出现,您就会知道,因为测试将因更改而开始失败。

我在 Linux 上为此目的使用了 git and ctest--我知道它们也可以在 Windows 上使用,尽管我个人没有这方面的经验.

但是,如果您确实也需要保存数据:

  1. 如果数据量相当小,并且是基于文本的,那么您可以将其与您的代码一起提交。
  2. 如果数据量很大,或者是某种二进制格式,请查看 git 的 large file storage 扩展。