我一直在研究一个基本上需要触及每个视图的项目(所以在app / views文件夹中),但是有很多视图。鉴于bash和git的组合,如何从给定的修订版本中获取我未提交编辑的文件列表?
答案 0 :(得分:4)
这可能是一种更简洁的方法,但我认为以下方法有效:
如果更改前的最后一次修订为fa1afe1
,那么您可以在app/views
下找到所有已更改的文件:
git diff --name-only fa1afe1 -- app/views
此外,您可以在app/views
下看到git正在跟踪的所有文件:
git ls-files app/views
现在,您可以使用comm -3
和bash的进程替换语法找到仅出现在其中一个命令的输出中的所有行:
comm -3 <(git diff --name-only fa1afe1 -- app/views|sort) <(git ls-files app/views|sort)
(您可能会发现将两个命令的输出发送到临时文件然后使用comm
而不是使用进程替换更清楚,因为那时您将拥有一个适用于{{1}的解决方案也可能更容易理解。)
此命令还将显示自/bin/sh
以来的更改中删除的文件,因为这些文件不会出现在fa1afe1
的输出中。另外需要注意的是,严格来说,这只会向您显示该提交与现在之间不同的文件,因此它会丢失在一次提交中更改的文件,然后再恢复为原始内容。如果这是一个问题,那么您可以使用git ls-files
git log
和适当的格式来构建已更改文件的列表,而不是--name-only
。