我想要一个git openlast命令来查看上次提交,获取添加或更改的文件列表,将它们过滤为仅文本文件,最后在编辑器中打开它们。
到目前为止,我已经完成了以下工作:
git show --stat HEAD
read -p "Open in Vim tabs? (Y/n)" -n 1 -r
if [[ -z $REPLY || $REPLY =~ [Yy] ]]; then
vim -p $(git diff --diff-filter=AM --ignore-submodules --name-only HEAD^)
fi
Run Code Online (Sandbox Code Playgroud)
缺点是如果我在之前的提交中添加或更改了一个二进制文件,那么它会被编辑器打开(在这种情况下是 Vim)。有没有办法获取git diff命令输出的列表并删除二进制文件?
您可以通过管道传输xargs并用于grep -Il ""过滤二进制文件:
git diff --diff-filter=AM --ignore-submodules --name-only HEAD^ | \
xargs grep -Il ""
Run Code Online (Sandbox Code Playgroud)
git openfiles命令#!/bin/bash
git show --stat HEAD
files=($(git diff --diff-filter=AM --ignore-submodules --name-only HEAD^ | xargs grep -Il ""))
read -p "Open ${#files[@]} files in Vim tabs? (Y/n)" -n 1 -r
if [[ -z $REPLY || $REPLY =~ [Yy] ]]; then
exec vim -p ${files[@]}
else
exit 1
fi
Run Code Online (Sandbox Code Playgroud)