小编Uwe*_*der的帖子

如何在git中列出目录树的更改历史记录

Git不会跟踪目录.它只跟踪某些目录中的文件.(请参阅如何将空目录添加到Git存储库?)

但是,如果我有一定的提交历史,我隐含地也有目录树的更改历史记录.

那么我该如何回答以下问题:

  1. 何时创建了目录foo/bar(在git术语中:何时是该目录中创建的第一个文件).如果在历史记录中删除了foo/bar并稍后重新创建,则可能会有多个限定提交.
  2. 何时删除了目录foo/bar(在git术语中:何时从该目录中删除了最后一个文件).如上所述,可能会有多个符合条件的提交.
  3. foo/bar的子目录在历史的任何时间点都存在

我能想出的最接近的是伪代码:

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的问题.再次,可行,但可能不会在几分钟内.

问题是:

  1. 有没有更简单的方法?
  2. 如果没有:是否适合网上已有的脚本?(我的谷歌搜索没有透露任何,但我也没有提出完美的搜索词)

git

15
推荐指数
2
解决办法
1万
查看次数

是git grep buggy - 禁用并行搜索?

如果我运行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)

我试过的

  1. 以超级用户身份运行以排除文件保护方面的任何问题 …

git

6
推荐指数
1
解决办法
265
查看次数

Terraform:如何从插值中获取布尔值?

我想为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)

terraform

6
推荐指数
1
解决办法
1895
查看次数

使用 bash 编写 Unix 过滤器

如果 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 中重新实现:由于空字节问题,它无论如何都不起作用。但我想扩展基本循环以对文本文件的某些行进行一些自定义处理。但是,我们都见过没有最后换行符的文本文件,所以我更希望这种情况能得到处理。

bash

3
推荐指数
1
解决办法
595
查看次数

标签 统计

git ×2

bash ×1

terraform ×1