我正在尝试使用git从两次提交中导出已更改文件的列表,并使用以下命令:
read -ra ADDR <<< `git diff --name-only HEAD..HEAD~1 | sed -e "s/ /\\\ /g"`
for i in "${ADDR[@]}"; do
echo "$i"
done
这很好用。我得到一个很好的列表打印到终端,每个文件都在新行上。
file1.txt
file2.txt
file3.txt
但是,我想使用--name-status
代替--name-only
。原因是我可以稍后根据所做的改变(例如M或D)做不同的事情。
但这不起作用。我得到了以下格式的列表:
M
file1.txt
M
file2.txt
M
file3.txt
我尝试将IFS
变量更改为$'\n'
(返回一行中的所有内容),$'\t'
(返回第一行,例如M file1.txt
)和{{1 }(与' '
相同)但没有成功。
答案 0 :(得分:1)
while read STATUS ADDR
do
echo "$ADDR ($STATUS)"
done < <(git diff --name-status HEAD..HEAD~1)
E.g。对于像
这样的git输出M INSTALL
M debian/changelog
M src/lib/libnvpair/SConscript
M src/lib/libzfscommon/SConscript
M src/lib/libzpool/SConscript
M src/zfs-fuse/main.c
以下内容由while循环打印:
INSTALL (M)
debian/changelog (M)
src/lib/libnvpair/SConscript (M)
src/lib/libzfscommon/SConscript (M)
src/lib/libzpool/SConscript (M)
src/zfs-fuse/main.c (M)