列出单词消失的文件

List files in which a word has disappeared

所以,假设我有两个分支 old_release(包含旧版本)和 new_release(包含新版本)。旧版本中有一个工具叫cook,我想它仍然在新版本中,但它被重命名了。我需要弄清楚它被重命名为什么。

我想要一个必须满足条件的文件列表;

  1. 文件存在于 old_releasenew_release 中。
  2. old_release 的版本中找到了字符串 cook
  3. new_release 的版本中找不到字符串 cook。我需要这个条件,因为大部分代码都没有更新,并且将包含对 cook.
  4. 的失效引用
  5. 我的仓库很大,签出一个分支需要很长时间。我想要一个避免这种情况的解决方案。

我目前的解决方案是这样的;

git checkout old_release
grep cook . -R -l -I > old_release_cooks.txt
sort -o old_release_cooks_sorted.txt old_release_cooks.txt
git checkout new_release
grep cook . -R -l -I > new_release_cooks.txt
sort -o new_release_cooks_sorted.txt new_release_cooks.txt
vim -d old_release_cooks_sorted.txt new_release_cooks_sorted.txt

这满足了我除第 4 点之外的所有要求。它要求我至少进行一次结帐。严格来说,我猜它不会创建不同的文件列表,但差异足够接近。

有没有办法在不签出的情况下获取此列表?

Checkout-free one-liner in bash 使用 git grep 并使用 comm:

评估其结果

word='cook' rel1='old_release' rel2='new_release'; comm -1 -2 <(git grep -l '\b'"$word"'\b' "$rel1" | sed 's/^[^:]*://' | sort;) <(git grep -L '\b'"$word"'\b' "$rel2" | sed 's/^[^:]*://' | sort;)

编辑:进行调整,使您的条件 1 也得到满足(文件必须存在于两者中)

EDIT2:简化表达式