2017-01-02 5 views
1

Я пытаюсь использовать git log -L <start>,<end>:<filename>, но я хотел бы иметь очень ограниченный выход (на самом деле просто хэши). Хотя -pretty печатает информацию о фиксации в формате, который я хочу, я не нашел способ не отображать diff ...git log -L без diff

например. на Linux-рядом, что я попытался это:

git log --pretty=format:"%H" -s -L 70,70:./arch/x86/include/asm/irqflags.h 

где (согласно страницы руководства) на -s должен подавить в выводе из различий, однако выход:

$ git log --pretty=format:"%H" -s -L 70,70:./arch/x86/include/asm/irqflags.h 
6abcd98ffafbff81f0bfd7ee1d129e634af13245 
diff --git a/include/asm-x86/irqflags.h b/include/asm-x86/irqflags.h 
--- a/include/asm-x86/irqflags.h 
+++ b/include/asm-x86/irqflags.h 
@@ -1,2 +64,1 @@ 
-#ifdef CONFIG_X86_32 
-# include "irqflags_32.h" 
+{ 

96a388de5dc53a8b234b3fd41f3ae2cedc9ffd42 
diff --git a/include/asm-x86/irqflags.h b/include/asm-x86/irqflags.h 
--- /dev/null 
+++ b/include/asm-x86/irqflags.h 
@@ -0,0 +1,2 @@ 
+#ifdef CONFIG_X86_32 
+# include "irqflags_32.h" 

Я с помощью Git версии 2.10.2

+0

Не могли бы вы использовать что-то вроде этого, чтобы обойти его? 'git винить -L70,70 ./arch/x86/include/asm/irqflags.h | cut -d '' -f1' – crea1

+0

Нет, это даст мне только последнее сообщение, которое изменило эту строку ... а не историю. Таким образом, в приведенном выше примере я бы только вернулся 6abcd98f, но не 96a388de thx! – andipla

ответ

0

опция -L не в настоящее время (и, видимо, никогда не было) совместим с -s/--no-patch, из-за this code вызываемом из line_log_print, вызывается из the top of log_tree_commit КН en -L действует. Указанный код просто выводит всю выбранную линейную линию из любого согласованного коммита. (Вы можете пропатчить хак подчиняться опции вывода различий, возможно.)

(Другой очевидный обходной путь будет использовать git rev-list вместо git log, за исключением того, что -L есть, как, что первые ноты линии связи, не надлежащим образом интегрированы в первое место, так что git rev-list не обрабатывает его)

+0

спасибо за этот очень точный ответ ... Я просто использую git log as is и egrep из строки с фиксацией. – andipla

0

одно решение Grep состоит в трубе выход к ГРЭП только выводит строки, соответствующие фиксации:.

git log -L 10,11:example.txt | grep 'commit \w' -A 4 

Grep соответствует первой строке каждой записи журнала и печатает следующие 4 строки с флагом -A

Это немного подробный. Хотелось бы услышать, есть ли у кого-то лучшее решение!

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