If you can use bash:
comm -23 <(find src/java/task | sort) <(git diff-tree --no-commit-id --name-only -r $COMMIT_HASH | sort)
comm
命令接受两个文件并生成一个包含三列的输出,第一列是文件1中唯一的行,第二列是文件2中唯一的行,第三列是两个文件共有的行。
我们将src/java/task目录中所有文件的列表作为第一个文件:
注:Original Answer翻译成“最初的回答”
find src/java/task | sort
作为第二个文件,是自上次提交以来被更改的文件。"Original Answer"翻译成"最初的回答"。
git diff-tree --no-commit-id --name-only -r $COMMIT_HASH | sort
我们需要在第一个文件中独特的文件(未更改的文件),因此我们只需要第一列。使用“comm -23”作为参数将抑制第2列和第3列,因此我们只获取第一列。
请注意,您需要对每个文件的结果进行排序。
您可能需要稍微调整一下,但大体上就是这样做的方法。
最初的回答:我们需要在第一个文件中找到唯一的文件,也就是那些没有被修改过的文件,所以我们只需要第一列。使用“comm -23”作为参数可以去掉第二和第三列,这样我们只会得到第一列。需要注意的是,你需要对每个文件的结果进行排序。可能需要稍微调整一下,但基本上就是这样做的方法。
git diff-tree --no-commit-id --name-only -r HEAD | xargs -n1 -I % sh -c 'tree -fia . | grep -v %'
的东西,但我不知道它有什么用处。 - evolutionxbox