2

我正在尝试使用 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)和' '(与 相同\t)但没有成功。

4

1 回答 1

2
while read STATUS ADDR
do
    echo "$ADDR ($STATUS)"
done  < <(git diff --name-status HEAD..HEAD~1)

例如对于 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)
于 2012-01-05T16:25:42.720 回答