gpt4 book ai didi

c++ - 如何将更新的 git-hash 嵌入到 Version.hpp 中?

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:04:10 25 4
gpt4 key购买 nike

原标题:如何让git忽略我的文件而不考虑分支?

我有以下按预期工作的 checkout 后文件:

#!/usr/bin/ruby

cmd = ENV["HOME"] + "/dev/pitbull/cpp/bin/gen_version.rb --write"
`#{cmd}`

gen_version.rb 脚本计算出时间戳、最后一个主标记和 HEAD git 哈希并写入同样在 git 中的 VERSION.hpp 文件。

然后我使用 use git update-index --assume-unchanged VERSION.hpp 让 git 忽略我的更改。

现在,如果我留在我的开发分支上,这会很好用。但是当我尝试 get checkout master 时,我被搞砸了:

git checkout master
error: Your local changes to the following files would be overwritten by checkout:
cpp/inc/core/util/VERSION.hpp
Please, commit your changes or stash them before you can switch branches.
Aborting

什么是正确的 git 设置,以便我可以在 checkout 时更新 VERSION.hpp 但让 git 忽略对此文件的任何更改,无论我的分支如何?

编辑我更改了主题,因为最终解决方案实际上解决了一个更广泛的主题,这可能对更多 SO 用户更有用。因此,您可以通过两种方式阅读本主题:使用原始标题和下面的答案,或者使用上面更广泛的问题,再次使用下面的完整解决方案。

最佳答案

为了解决我原来的问题:How to make git ignore my file carriaged branching?

  1. git rm cpp/inc/core/util/VERSION.hpp
  2. 将 cpp/inc/core/util/VERSION.hpp 添加到 .gitignore

要解决:如何将更新的 git-hash 嵌入到 Version.hpp 中?

问题的一部分是先有鸡还是先有蛋的问题,在所有文件都 checkin 之前您无法知道您的散列,但在您知道您的 git-hash 之前您无法 checkin 更新后的 VERSION.hpp。所以我的解决方案是将 VERSION.hpp 保留在存储库之外并保留在 .gitignore 文件中。

请记住将 VERSION.hpp 嵌入到可执行文件中的目的:如果在生产中出现严重的错误,通过二进制文件中的 git-hash,我们将知道要 check out git 的哪些代码,以便我们可以正确调试代码。

下面是我在上面两个步骤之外还采取的步骤:

  1. 写一个简短的 ruby​​ 脚本,它做两件事,这取决于局部区域是否脏(如果 git diff --shortstat 显示多于 0 行,你有一个脏区域)。 git rev-list HEAD | sed -n '1p' | cut -c1-10 将为您提供前 10 个字符作为 git-hash。如果你的本地区域很脏,这是 LAST HEAD 的 git-hash(我将字符串 LAST 嵌入到 VERSION.hpp 中)。如果这是干净的,那么它就是您当前真正的 git-hash。
  2. ruby 脚本将检查 1. 中的结果与实际的 VERSION.hpp 文件。如果结果发生变化,则将新的结果写入VERSION.hpp。
  3. 修改我的 .bashrc,添加两个小别名 - cmakerelcmakedbg​​ 用于在我的本地和发布目录中调用 cmake,但在我这样做之前,我在别名,我在 1. 中调用 ruby​​ 脚本以在必要时更新我的​​ VERSION.hpp。

如果我在 git checkout 之后调用 cmakerel 和 cmakedbg​​,并且如果我在构建之前不修改代码(无论如何我不应该为实际发布做这件事),我将拥有我需要的 VERSION.hpp嵌入了适当的信息。

注意 使用别名修改 .bashrc 的替代解决方案是使用 git 的 post-checkout hook(理论上)。但是,我无法让它工作,而且我已经在这个问题上花了太多时间,但你可能运气更好。

关于c++ - 如何将更新的 git-hash 嵌入到 Version.hpp 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13428403/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com