【发布时间】:2012-02-03 08:24:47
【问题描述】:
我正在尝试使用 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 相同)成功。
【问题讨论】:
-
你能在你的 sed 脚本中添加 ';/^M$/d' 来删除那些只是 M 的行吗。祝你好运。
-
当我运行
git diff --name-status <com1>..<com2>时,我得到一个文件名列表,状态在第一列。我不确定您的sed命令为您提供什么。我的bash不是最好的,所以我不能举个例子,但我认为你可以用awk得到你想要的,它可以让你按位置抓取字段,并输出它们。 thegeekstuff.com/2010/01/…