Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git:构建具有多个分支的项目_Git - Fatal编程技术网

Git:构建具有多个分支的项目

Git:构建具有多个分支的项目,git,Git,我在Git下有一个(大型)Fortran项目。有不同的活动分支,对应于正在开发的功能。我想找到一种方便的方法来为每个分支维护代码的编译版本 代码目前使用Make编译,所有的对象文件与二进制文件一起保存在一个单独的文件夹中(如build_branch1)。目录结构如下所示: Makefile ./src ./build_branch1/objects /build_branch1/bin /构建分支2/对象 /build_branch2/bin 原则上,我可以这样编译所有分支: git签出分支1

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

代码目前使用Make编译,所有的对象文件与二进制文件一起保存在一个单独的文件夹中(如build_branch1)。目录结构如下所示:

Makefile
./src
./build_branch1/objects
/build_branch1/bin
/构建分支2/对象
/build_branch2/bin

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

git签出分支1
make--prefix=build\u branch1
git签出分支2
make--prefix=build\u branch2
等等

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

我想知道在这种情况下最好的策略是什么。我正在考虑在每次结账后更新时间戳,如本文所示: 你会推荐什么?

相反,你可以使用在回答这些问题时不存在的机制(包括):

你可以:

  • 在每次构建之后,一个注释将使用构建时间戳创建提交
  • 在每次构建之前,查找最后一个构建时间戳的注释(在以分支命名的命名空间中),并使用该时间戳修改任何文件(根据git状态,当前未被修改)
这样做的目的是记录您需要的信息:

  • 在Git回购中(因此它可以持续)
  • 以一种不会改变当前历史记录的方式(提交的SHA1不会被修改)

谢谢,这是个好主意。我真的不喜欢在每次签出时都做一些事情的想法(我做的大多数签出都不是为了构建代码)。