Git不会跟踪目录.它只跟踪某些目录中的文件.(请参阅如何将空目录添加到Git存储库?)
但是,如果我有一定的提交历史,我隐含地也有目录树的更改历史记录.
那么我该如何回答以下问题:
我能想出的最接近的是伪代码:
loop over all commits (git rev-list --all)
start from repo root directory
do recursively on the directory tree rebuilt so far
call git ls-tree and grep the tree lines
rebuild next level of directory tree
end
end
Run Code Online (Sandbox Code Playgroud)
显然,这可以用您最喜欢的脚本语言编写.
然后我有所有目录树,我仍然需要以聪明的方式搜索它们,以便回答类型1 - 3的问题.再次,可行,但可能不会在几分钟内.
问题是:
如果我运行git grep命令n次,我会得到大约0.8*n次的错误.
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null
fatal: unable to read tree (bc9e3369c6d6f027075e794fa11db02af3f8fb38)
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null
fatal: unable to read tree (473a47dd3895b1db09baf4cf9463f4cbd224d5dd)
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null
fatal: unable to read tree (b917adbfffd1928c8f6ac0f746a4fdfcf2088029)
$ git grep foo_bar_search `git rev-list HEAD` -- dir/subdir >/dev/null
fatal: unable to read tree (473a47dd3895b1db09baf4cf9463f4cbd224d5dd)
Run Code Online (Sandbox Code Playgroud)
我试过的
我想为prevent_destroy元参数使用内插值
当我编码时
lifecycle {
# never destroy the IP address of the production stage,
prevent_destroy = "${var.stage_name == "global" ? true : false }"
}
Run Code Online (Sandbox Code Playgroud)
我得到
* cannot parse 'prevent_destroy' as bool: strconv.ParseBool: parsing "${var.stage_name == \"global\" ? true : false }": invalid syntax
Run Code Online (Sandbox Code Playgroud)
等效误差为
lifecycle {
prevent_destroy = "${var.stage_name == "global" ? 1 : 0 }"
}
Run Code Online (Sandbox Code Playgroud)
当我定义一个本地定义
locals {
booltest = "${var.stage_name == "global" ? true : false }"
}
Run Code Online (Sandbox Code Playgroud)
好像经过,但指的是当地
lifecycle {
prevent_destroy = "${var.booltest}" …Run Code Online (Sandbox Code Playgroud) 如果 Unix/Linux 命令接受来自标准输入的输入数据并在标准输出上产生其输出(结果),则称为过滤器。
微不足道的过滤器是cat。它只是将 stdin 复制到 stdout 而不做任何修改。
我如何cat在 bash 中实现?(忽略命令获取命令行参数的情况)
我想出了
#! /bin/bash
while IFS="" read -r line
do
echo -E "$line"
done
Run Code Online (Sandbox Code Playgroud)
这似乎在大多数情况下都有效,也适用于包含一些二进制字节的文本文件,只要它们不是空字节。但是,如果最后一行不是以换行符结尾,则输出中将缺少该行。
如何解决?
我几乎可以肯定之前肯定已经回答过这个问题,但是我的搜索技巧似乎还不够好。
显然我不想cat在 bash 中重新实现:由于空字节问题,它无论如何都不起作用。但我想扩展基本循环以对文本文件的某些行进行一些自定义处理。但是,我们都见过没有最后换行符的文本文件,所以我更希望这种情况能得到处理。