2

次のコマンドを使用して、git を使用して 2 つのコミットから変更されたファイルのリストをエクスポートしようとしています。

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'(1 行ですべてを返す)、$'\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 に答える