互联网上充斥着对这个问题的不正确和不理想的答案.这是不幸的,因为你会认为这将是你想做的常见事情.
问题:当pre-commit钩子运行时,存储库可能不干净.因此,如果你天真地进行测试,他们就不会反对你提交的内容,而是你的工作树中发生的任何污垢.
最明显的事情是git stash --keep-index --include-untracked在的开始pre-commit,并git pop在出口处.这样你就可以测试(纯)索引,这就是我们想要的.
不幸的是,如果你使用它git add --patch,会生成合并冲突标记(特别是如果你编辑了),因为stash@{0}提交后内容可能与工作树不匹配.
另一个常见的解决方案是克隆存储库并在新的临时存储库中运行测试.这有两个问题:一个是我们还没有提交,所以我们不能轻易地获得我们即将提交的状态的存储库副本(我确信有一种方法可以做到这一点) ,但我不感兴趣,因为:).其次,我的测试可能对当前工作目录的位置敏感.例如,由于本地环境配置.
那么:如何在git stash --keep-index --include-untracked不引入合并冲突标记的情况下将我的工作树恢复到它所处的状态,并且不修改提交后的内容HEAD?
我正在研究调试/内存工具.我想显示来自C++的符号,问题是它们非常冗长.目前我正在使用__cxa_demangle,但由于包含默认模板参数,这通常会产生超过500个字符的巨大字符串.
clang++ 当它报告符号时,可以清楚地做出聪明的事情,有什么方法可以利用它吗?
举个简单的例子,我们来看看:
std::map<std::string const, unsigned int, std::less<std::string const>, std::allocator<std::pair<std::string const, unsigned int> > >::find(std::string const&)
Run Code Online (Sandbox Code Playgroud)
显然可以报告为:
std::map<std::string const, unsigned int>::find(std::string const&)
Run Code Online (Sandbox Code Playgroud)
..如果我有一个足够聪明的工具.很明显,如果没有额外的知识(比如最初使用的包含 - 我可能会得到这些),这很难做到,但我会感激任何指针.
到目前为止,我一直指向libcxxabi,但除了没有解析树的公共接口(这本身不会阻止我)之外,似乎我必须努力确定哪些参数是默认值.如果我能以某种方式欺骗我这样做,那就太好了.