3

我在 Git 下有一个(大)Fortran 项目。有不同的活动分支,对应于正在开发的功能。我想找到一种方便的方法来维护每个分支的代码的编译版本。

该代码当前使用 Make 编译,所有目标文件与二进制文件一起保存在一个单独的文件夹(如 build_branch1)中。目录结构是这样的:

生成文件
./src
./build_branch1/objects
./build_branch1/bin
./build_branch2/objects
./build_branch2/bin
...

因此,原则上,我可以像这样编译所有分支:

git checkout branch1
make --prefix=build_branch1
git checkout branch2
make --prefix=build_branch2
等等...

Make 将源文件的时间戳(由 Git 新签出)与 build_branchN 文件夹中的目标文件进行比较,并重新编译已更改的文件。问题是 Git 更改了分支 1 和分支 2 之间不同的所有源文件的时间戳,因此许多文件在不需要时被重新编译。由于代码需要很长时间才能编译(最多 30 分钟),这可能会带来很大的不便。

我想知道在这种情况下什么应该是最好的策略。我正在考虑在每次结帐后更新时间戳,就像在这篇文章中一样:git 的 use-commit-times 是什么? 你会推荐什么?

4

1 回答 1

3

您可以使用在这些答案(包括的)时不存在的机制,而不是修改每个 checkout 的时间戳:。git notes

你可以:

  • 每次构建后,记下使用构建时间戳构建的提交
  • 在每次构建之前,查找最后一个构建时间戳的注释(在以分支命名的命名空间中)并使用该时间戳修改任何文件(根据 git status,当前没有被修改)。

这个想法是记录您需要的信息:

  • 在 Git 存储库中(所以它可以持续存在)
  • 以不改变当前历史的方式(不修改提交的 SHA1)
于 2012-11-21T13:33:48.870 回答