Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Split git diff--按换行符显示名称状态_Git_Bash_Git Bash - Fatal编程技术网

Split git diff--按换行符显示名称状态

Split git diff--按换行符显示名称状态,git,bash,git-bash,Git,Bash,Git Bash,我正在尝试使用git通过以下命令从两次提交中导出已更改文件的列表: read -ra ADDR <<< `git diff --name-only HEAD..HEAD~1 | sed -e "s/ /\\\ /g"` for i in "${ADDR[@]}"; do echo "$i" done 但是,我想使用--name status而不是--name only。原因是我以后可以根据所做的更改(例如M或D)做不同的事情 但这不起作用。我得到以下格式的列表: M

我正在尝试使用git通过以下命令从两次提交中导出已更改文件的列表:

read -ra ADDR <<< `git diff --name-only HEAD..HEAD~1 | sed -e "s/ /\\\ /g"`
for i in "${ADDR[@]}"; do 
    echo "$i"
done
但是,我想使用
--name status
而不是
--name only
。原因是我以后可以根据所做的更改(例如M或D)做不同的事情

但这不起作用。我得到以下格式的列表:

M
file1.txt
M
file2.txt
M
file3.txt
我尝试将
IFS
变量更改为
$'\n'
(在一行上返回所有内容),
$'\t'
(返回第一行,例如
M file1.txt
)和
'
(与
\t
)但未成功

while read STATUS ADDR
do
    echo "$ADDR ($STATUS)"
done  < <(git diff --name-status HEAD..HEAD~1)
以下内容由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)

你能不能加上“/^M$/d'到您的sed脚本中,以删除仅为M的行。祝您好运。当我运行
git diff--name status..
时,我会得到一个文件名列表,状态在第一列中。我不确定您的
sed
命令提供了什么。我的bash不是最好的,所以我不能给出一个例子,但我认为你可以通过
awk
获得你想要的,它可以让你按位置抓取字段,并输出它们。唉。我花了几次忍者编辑才把它弄对。现在完成:)
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
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)