对于我的硕士论文,我正在使用开源CFD仿真工具OpenFOAM。对于那些不熟悉其结构的人:
您通常会为每个模拟案例创建一个目录。该目录由几个子目录组成,其中存储了几个ascii配置文件。那些定义网格,解算器的选项等等......根据模拟的复杂性,在很多文件中可能会有相当多的设置。
由于它经常需要进行一些实验,直到您找到工作设置,控制这些配置文件中的更改并能够切换回以前状态的版本将非常有用。每个版本控制软件都应提供此基本功能。
我发现this blog entry关于使用git跟踪OpenFOAM配置文件的更改。在我自己设置之后,我可以确认git在这种情况下确实非常有效。
但是,该条目还讨论了在单个案例中使用分支进行参数变化的问题。我经常需要创建稍微修改过的案例副本,例如检查不同边界条件对我的模拟的影响。
在这里使用不同的分支是不够的,因为我需要比较不同修改的结果,因此每个模拟都需要自己的工作目录!
我的解决方案是为每个修改过的案例克隆我原来的git-case存储库。但是现在它变得非常麻烦,只要我想对这个"案例家族进行一般性改变"。请考虑以下情形:
由于git不允许"推动下游" (因为"泛型" repo不知道它的"孩子")我必须手动拉动每个克隆。
我理想的设置如下:
换句话说,与git背后的原始概念不同(在子分支上工作并且从上游到主人的缓慢移动变化),在我的场景中,这个概念更类似于"变更的继承"就像面向对象编程一样。
这可能,或者有没有办法比我现在的git设置更接近这个涉及大量的推拉?由于我是唯一一个在本地机器上工作的人,我是否应该更改为像subversion这样的集中版本控制工具?
感谢这些建议,我取得了一些进展。我发现git-new-workdir script几乎满足了我对共享配置文件和"外包"的所有要求。工作目录,而不必推送和拉取目录之间的所有更改(我也知道这已经作为更新版本的git核心函数包含在内)。
关于"继承更改" -part,我可以通过让所有派生分支跟踪其本地上游分支中的更改来覆盖大多数设置。合并很可能通过提交后挂钩自动完成。
唯一不合适的情况是,如果一个分支是由几个父母"分支机构。示例设置:
modified geometry <--- generic ---> generic 2D
\ /
\ /
> modified geometry 2D <
我是否正确地认为git只能管理每个分支的一个上游分支,并且不可能从两个上游分支自动合并?