Git是一种分布式VCS,在开源社区非常流行。使用git有很多好处:创建新版本非常简单,这简化了尝试新想法的过程,git web服务(GitLab、GitHub、Bitbucket)简化了处理由多个贡献者编辑的文件中的冲突,每个贡献者都持有项目的完整副本,贡献者可以在不访问internet的情况下工作,因为工作时不需要与中央存储库建立开放连接等。git上有大量的在线信息1。在剩下的章节中,我们假设对git有一个合理的理解。要使用OpenFOAM,只需了解如何:克隆远程存储库,在本地和远程存储库上创建删除和合并版本(分支),从远程存储库推送和拉取,以及创建项目的git标记(快照)。在envie.com上可以找到一个很好的分支模型。下面我们将概述一些涉及git和OpenFOAM的用例。

提示:虽然这里没有介绍,但学习git版本控制系统的基本用法对于OpenFOAM开发是必要的。

OpenFOAM git存储库位于https://develop.openfoam.com/Development/openfoam/,可以通过下面的命令访问:

git clone https://develop.openfoam.com/Development/openfoam.git

命令完成后,整个历史记录在本地计算机上可用,并且可以调查发布的历史记录。存储库在主(主)分支中克隆。OpenFOAM快照(版本)定期创建为git标记

?>  openfoam
?>  git tag
OpenFOAM-v1601
OpenFOAM-v1606
OpenFOAM-v1612
OpenFOAM-v1706
OpenFOAM-v1712
OpenFOAM-v1806
OpenFOAM-v1812
OpenFOAM-v1812.200312
OpenFOAM-v1812.200417
OpenFOAM-v1906
OpenFOAM-v1906.191111
OpenFOAM-v1906.200312
OpenFOAM-v1906.200417
OpenFOAM-v1912
OpenFOAM-v1912.200129
OpenFOAM-v1912.200312
OpenFOAM-v1912.200403
OpenFOAM-v1912.200417
OpenFOAM-v1912.200506
OpenFOAM-v1912.200626
OpenFOAM-v2006

可以使用下面的命令签出发布标签:

git checkout OpenFOAM-v2006

历史记录或日志提供有关更改的信息:作者、日期和描述更改的消息(git提交)。

git log

主动开发的功能可作为功能分支使用:

?>  git branch -a
remotes/origin/cloud-function-objects-extension
remotes/origin/code-review.mol
remotes/origin/code-review.saf
remotes/origin/develop
remotes/origin/doc-utilities.kbc
remotes/origin/feature-GIS-tools
remotes/origin/feature-MPPIC-dynamicMesh
remotes/origin/feature-PatchFunction1-ACMI
remotes/origin/feature-dlLibrary-unloader
remotes/origin/feature-film-flux-function-object
remotes/origin/feature-generalizedNewtonian
remotes/origin/feature-generalizedNewtonian.orig
remotes/origin/feature-generalizedNewtonian.up1
remotes/origin/feature-liquidFilm
...

如果你决定直接在OpenFOAM的主要结构中工作,在develop.openfoam.com上创建一个帐户,从项目维护人员中请求成为该项目成员,然后fork OpenFOAM。一旦功能被彻底测试,就可以提交一个合并请求,这样代码就可以集成到OpenFOAM中。

1、将独立的OpenFOAM项目置于版本控制下

使用git进行定制开发的最常见方法是在与主版本无关的单独存储库中跟踪每个项目。这简化了代码的共享,因为它可以在没有完整OpenFOAM版本的情况下共享。假设三个项目应置于版本控制之下:projectA、projectB和projectC。必须单独输入这些项目的每个目录,并且必须在每个目录中初始化git存储库:

cd projectA
git init

这些存储库中的每一个都是本地的并且是空的。必须手动将文件添加到存储库中。以防止在编译时生成的.deb文件和lnInclude目录污染存储库。还应添加gitignore文件,以防止它们出现在存储库中。此方法使您能够更轻松地在不同的OpenFOAM版本之间共享和移植代码。

2、在主存储库中开发

虽然一开始直接在OpenFOAM存储库中开发可能有点奇怪,但与将开发放在单独的存储库中相比,它有几个优点。如果管理一个HPC集群并为所有应该使用一些自定义开发的用户安装一个全局OpenFOAM版本,那么这种开发方式可能会派上用场。合并主分支并只对该分支应用更改是将自定义开发集成到OpenFOAM存储库中的一种相当安全的方法。然后将此分支部署到HPC集群。

主分支应该与主存储库的主存储库类似,主存储库的任何上游更改都应该合并到本地开发分支中,以保持最新。使用git挂钩,部署本身可以进一步自动化。然而,在这种配置中,将开发从一个主要版本迁移到下一个版本可能比使用独立的存储库更加困难。

3、模拟案例的版本控制

因为git可以跟踪任何文本文件,所以它不仅限于源代码,还可以处理OpenFOAM的情况。一些文件和目录,如时间步长和处理器目录,不应该被git跟踪,因此必须被适当的.gitignore文件排除。这个选择已经由.gitignore在ofbookcases项目中完成了,它会忽略网格和许多其他与案例设置没有直接关系的文件和目录。跟踪案例的一个很好的应用是研究各种参数对模拟的影响。这使得多次复制相同的案例变得过时。出版物或技术报告中使用的模拟案例版本的快照可以使用git标记创建。