通过 make/ninja-like 工具有效地使用 git 结帐

Using git checkout with make/ninja-like tools efficiently

当我使用我的 git-repos(在 C/C++ 中)时,我会定期切换分支,有时想构建一个特定的分支或标签(使用 make)。当我切换回我当前主要关注的分支时,运行 make 将导致非常长的构建时间。有什么方法可以配置 git,或者使用一些 git-checkout 特定参数来恢复存储库的状态,就构建系统(例如 make)而言?构建系统忍者在这方面做得更好吗?

如果没有办法做到这一点,那为什么呢?如果有办法,为什么默认不实现?

主要问题是为什么您的构建工具需要那么长的时间。如果是因为不同分支的文件需要重新构建,构建工具或者Git应该如何防止呢?如果这是您的问题,您可以使用 git worktree 为不同的分支添加多个工作树。

我不太清楚你说的 "the state of the repository as far as the build system is concerned" 是什么意思;我假设你说的是你改变到另一个分支,然后没有建立切换回来 - 但是这样做会改变源文件上的时间戳所以 make 认为它必须重建一切......

IMO 最简单的解决方案是使用两个工作树 - 一个保留在 "usually-in-focus branch" 上,另一个用于浏览其他分支。这可以通过克隆 repo 两次或使用 git worktree 命令来完成。

我不知道 git 有什么方法可以将源时间戳设置为切换分支之前的状态。为什么不?因为以通常有用的方式实施它而不会引起问题可能是不可能的。