Я пытаюсь экспортировать список измененных файлов из двух фиксаций с мерзавцем, с помощью этой команды:Split мерзавец дифф --name-статус по линии разрыва
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
) безуспешно.
вы можете просто добавить «;/^ M $/д» к вашему SED скрипт для удаления строк, которые просто М. Удачи. – shellter
Когда я запускаю 'git diff -name-status .. ' Получаю список имен файлов со статусом в первом столбце. Я не уверен, что предлагает вам команда 'sed'. Мой bash не самый лучший, поэтому я не могу привести пример, но думаю, вы можете получить то, что хотите, с помощью 'awk', что позволит вам захватить поля по положению и вывести их. http://www.thegeekstuff.com/2010/01/awk-introduction-tutorial-7-awk-print-examples/ –
lhagemann