git切分支引起的重编译问题

实际使用git管理一个大型项目时,如llvm,当仅修改极少量的代码,切换分支后会引起很多代码的重新构建。特别是切换到老的分支上,老的build目录里应该不需要重新编译才对。由此引发一个问题:git checkout 切换分支之后,源码的日期会变化吗?

假如A,B分支中都有源文件fun.c, A中比B中新,当前在A分支,checkout到B分支,fun.c的修改日期会变成B分支中最后修改日期吗?

答案是,因为fun.c的在两个分支上不同,切B后会重写编译环境中的该文件,导致fun.c的修改时间为当前最新时间,这一般会比A,B分支的最后修改时间都新,从而切分支的过程会引起构建的叶子节点变化感知,触发一系列重新构建操作。而我们预期的应该是且分支之后,文件的修改时间变成最终提交时间。

git-restore-mtime是一个切分支后恢复文件时间为分支上最后修改时间的第三方工具。在ubuntu下安装和使用方法如下

sudo apt-get install git-restore-mtime
git restore-mtime
posted @ 2024-01-21 09:06  zwlwf  阅读(75)  评论(0编辑  收藏  举报