2012-01-05 2 views
2

Я пытаюсь экспортировать список измененных файлов из двух фиксаций с мерзавцем, с помощью этой команды: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) безуспешно.

+0

вы можете просто добавить «;/^ M $/д» к вашему SED скрипт для удаления строк, которые просто М. Удачи. – shellter

+0

Когда я запускаю 'git diff -name-status .. ' Получаю список имен файлов со статусом в первом столбце. Я не уверен, что предлагает вам команда 'sed'. Мой bash не самый лучший, поэтому я не могу привести пример, но думаю, вы можете получить то, что хотите, с помощью 'awk', что позволит вам захватить поля по положению и вывести их. http://www.thegeekstuff.com/2010/01/awk-introduction-tutorial-7-awk-print-examples/ – lhagemann

ответ

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

E.g. для вывода мерзавца, как

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) 
+0

вздох. Мне потребовалось несколько изменений ниндзя, чтобы все исправить. Совершено сейчас :) – sehe

+0

Работает как очарование, спасибо! – Magnus

Смежные вопросы