我在Bash窗口中的标签上使用git diff,并且它在大多数情况下执行我想要的操作。
$ git diff -- numstat TAG2 TAG1
给出这个输出:
4 6 dir1/dir2/dir3/dir4/thisIsMyFile.cs
如何获得此输出:
4 6 thisIsMyFile.cs
我不需要/想要路径(dir1/dir2/dir3/dir4/
),只需要文件名(thisIsMyFile.cs
)。
答案 0 :(得分:2)
据我所知,单凭Git没有办法做到这一点(即只给Git diff正确的参数)。您必须使用Bash管道来后处理Git输出。我建议:
git diff --numstat TAG2 TAG1 | while IFS= read -r line; do
printf '%s\t' "$(cut -f-2 <<<"$line")"
basename "$(cut -f2- <<<"$line")"
done
这有点复杂,因为它旨在保留原始格式并正确解析,即使文件中包含选项卡或空格也是如此。如果您可以保证文件名中没有空格,或者您有兴趣使用比Bash更强大的脚本语言来解析行,则可以简化它。
答案 1 :(得分:1)
您可以使用awk
:
git diff --numstat | awk -F'[/\t]' '{print $1,$2,$NF}'
awk
命令在做什么?
-F'[/\t]'
将字段分隔符设置为tab或/。 (git的输出是制表符分隔的)。 $NF
是该行中的 last 字段 - 文件名。
注意:当文件名包含选项卡时,上述命令将失败。如果你能忍受这种限制,那就玩得开心吧!
答案 2 :(得分:0)
使用basename -a $(git diff --numstat TAG1 TAG2)
注意我使用bash语法执行子命令。