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
단점은 이전 커밋에서 바이너리를 추가하거나 변경하면 편집기(이 경우 Vim)에서 바이너리가 열린다는 것입니다. 명령 출력 목록을 가져 git diff
오고 바이너리를 제거하는 방법이 있습니까?
답변1
이를 파이프하여 바이너리를 필터링하는 데 xargs
사용할 수 있습니다.grep -Il ""
git diff --diff-filter=AM --ignore-submodules --name-only HEAD^ | \
xargs grep -Il ""
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
답변2
파일 확장자가 있는 경우 Gawk를 사용하여 목록에서 원하는 파일을 선택할 수 있습니다. 예에는 ".txt" 및 ".jpeg" 확장자가 있습니다. Git 출력 편집을 위한 정규식입니다.
git show --stat HEAD
commit ec07d8306e9e61894d18e6f8d6ea1e5d650c0712
Author: root <root@somebox>
Date: Thu Dec 17 17:19:30 2015 -0500
test project commit
add email addresses.jpeg | Bin 0 -> 127688 bytes
allpermissions.jpeg | Bin 0 -> 126620 bytes
error.jpeg | Bin 0 -> 227469 bytes
sonic_boom.jpeg | Bin 0 -> 112958 bytes
test1.jpeg | Bin 0 -> 96857 bytes
test1.txt | 1 +
test2.txt | 1 +
top_cipher_test_results.jpeg | Bin 0 -> 149293 bytes
Gawk는 바이너리 .jpeg 확장 파일을 제거합니다.
git show --stat HEAD|awk '{ if($1 ~ /.jpeg/)print $1}'
필요한 경우 .txt 및 .jpeg를 포함합니다.
git show --stat HEAD|awk '{ if($1 ~ /.jpeg|.txt/)print $1}'