如何将更新后的git哈希嵌入Version.hpp
How to embed an updated git-hash into Version.hpp?
原始标题:如何使git忽略我的文件而不管分支
我有下面的签出后文件,它按预期工作:
#!/usr/bin/ruby
cmd = ENV["HOME"] + "/dev/pitbull/cpp/bin/gen_version.rb --write"
`#{cmd}`
gen_version.rb脚本计算出时间戳、最后一个master标记和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设置,这样我可以在签出时更新VERSION.hpp,但无论我的分支如何,git都可以忽略对此文件的任何更改
EDIT我更改了主题,因为最终解决方案实际上解决了一个更广泛的主题,这可能对更多SO用户更有用。因此,您可以通过两种方式阅读此主题:使用下面的原标题和答案,或者使用上面的更广泛问题,再使用下面的整个解决方案。
为了解决我最初的问题:如何使git忽略我的文件而不管分支
- git-rm-cpp/inc/core/util/VERSION.hpp
- 将cpp/inc/core/util/VERSION.hpp添加到.gignore
要解决的问题:如何将更新的git哈希嵌入Version.hpp
问题的一部分是一个鸡蛋问题,在所有文件都签入之前,你无法知道你的哈希,但在知道你的git哈希之前,你不能签入更新的VERSION.hpp。因此,我的解决方案是将VERSION.hpp从存储库中保留在.gitignore文件中。
请记住,将VERSION.hpp嵌入可执行文件的目的是:如果生产中出现严重错误,二进制文件中有git哈希,我们将知道要签出git的代码,以便正确调试代码
除了上面的两个步骤外,我还采取了以下步骤:
- 编写一个简短的ruby脚本,它做两件事,这取决于本地区域是否脏(如果
git diff --shortstat
显示的行数超过0,则表示存在脏区域)。git rev-list HEAD | sed -n '1p' | cut -c1-10
将提供前10个字符作为git散列。如果你的本地区域是脏的,这是LASTHEAD的git哈希(我在VERSION.hpp中嵌入了字符串LAST)。如果这是干净的,这就是你真正的当前git哈希 - ruby脚本将在1中检查结果。对比实际的VERSION.hpp文件。如果结果发生了更改,则将新结果写入VERSION.hpp
- 修改我的.bashrc,添加两个小别名-cmakerel和cmakedbg,用于在本地和发布目录中调用cmake,但在我在别名中执行cmake和make之前,我在1中调用ruby脚本。如有必要,请更新我的VERSION.hpp
如果我在git签出后调用cmakerel和cmakedbg,并且如果我在构建之前不修改代码(无论如何,我不应该在实际发布中这样做),我将获得所需的VERSION.hpp,并嵌入所有适当的信息。
注意使用别名修改.bashrc的另一种解决方案是使用git的签出后挂钩(理论上)。然而,我无法做到这一点,我已经在这个问题上花了太多时间,但你可能会有更好的运气。
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 使用Qt C++计算类似Git的SHA1哈希
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 用C++将哈希表写入文件并从文件中恢复
- c++找不到具有相同哈希的无序集合元素
- 哈希文件递归并保存到矢量Cryptopp中
- 对 pair<pair<int,int>pair<int,int unordered_map进行哈希处理>>
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 如何为字符串生成唯一但一致的 N 位哈希(小于 64 位)?
- 使用对象的基类部分模板专用化对对象进行哈希处理::哈希
- boost::包含提升单元的元组的哈希值
- 使用 Key 对 C++ 中的哈希映射进行排序. 无法排序
- C++中的并发哈希表
- 哈希映射使用 nullptr c++ 初始化节点的动态数组
- 在具有开放寻址的哈希表中插入节点 [优化逻辑]
- 与C++哈希表的基础知识混淆
- 如何为位集找到/实现一个好的哈希函数
- 如何将更新后的git哈希嵌入Version.hpp
- 使嵌套类型哈希能够用于std::unordered_set