2013-07-09 7 views
28

Существует много вопросов, которые показывают, как просматривать вывод команды git diff в средстве просмотра различий, например meld, с использованием git difftool или иным образом , Я не спрашиваю о git diff.Как просмотреть вывод `git show` в средстве просмотра diff, например, meld, kdiff3 и т. Д.

Я хочу видеть вывод git show <previous commit sha1> в качестве средства просмотра, например, meld. Как я могу это сделать?

+2

'gitk',' gitg', а другие приходят на ум ... – twalberg

ответ

33

Вы можете использовать git difftool, чтобы показать одно сообщение.

Допустим, вы хотите, чтобы увидеть коммит с sha1 abc123:

git difftool abc123~1 abc123 

(~1 говорит мерзавец, чтобы перейти к предыдущей фиксации, так abc123~1 это совершить, прежде чем abc123)

Если вы используете это регулярно, вы можете сделать заказную команду git, чтобы сделать ее проще:

  1. Создать файл c alled git-showtool где-то на $PATH со следующим содержанием:

    git difftool $1~1 $1 
    
  2. Дайте файл разрешения на выполнение:

    chmod +x ~/path/to/git-showtool 
    
  3. Используйте команду git showtool <sha1 or tag or ...>

  4. прибыль.
+0

также , вы должны перекрестно проверить, какую фиксацию вы собираетесь просматривать, и содержит ли оно много измененных файлов. потому что meld будет открываться один за другим последовательно – user2291758

+0

К сожалению, я получаю следующее сообщение об ошибке. Запуск 'p4mergetool' [Y/n]? Y /mingw64/libexec/git-core/git-mergetool - lib: eval: строка 124: неожиданный EOF при поиске соответствия '' ' /mingw64/libexec/git-core/git-mergetool - lib: eval : строка 125: синтаксическая ошибка: неожиданный конец файла – jpierson

16

Опираясь на ответ georgebrock, вы можете создать псевдоним в .gitconfig, что-то вроде этого:

showtool = "!showci() { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1" 

Затем вы можете запустить его с git showtool abc123 (без необходимости создавать отдельный скрипт для этого) , Если вы оставите ревизию, она будет по умолчанию для HEAD.

+1

Я согласен, что псевдоним git, вероятно, будет лучше. Спасибо за предложение. – Buttons840

+0

Я сильно предпочитаю это решение :) И я передал --dir-diff команде diffftool, чтобы быть четным более удобный для меня. – StormRider

8

Переводя предложение Стрельца за тем меньше мерзавца здравого смысла, добавить к вашей глобальной .gitconfig файл, который проживает в C: \ Users [имя пользователя], если вы являетесь пользователем окна:

[alias] 
    showtool = "!showci() { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1" 

или вы можете выполнить следующую команду в прибудете Баш оболочки:

git config --global alias.showtool '!showci() { rev=${1:-HEAD}; git difftool $rev~1 $rev; }; showci $1' 

который будет внести изменения в .gitconfig для вас.

1

Опираясь на ответ sagitarrian, вот это небольшое изменение для более общего синтаксиса оборотов:

showtool = "!showci() { rev=$(git rev-parse \"${*:-HEAD}\"); git difftool $rev~1 $rev; }; showci" 

Я использую rev-parse прозрачно разрешить сложные выражения перераб.

В конце я удалил $1, так как вызывается псевдоним, за которым следуют аргументы; он проходит незаметно при использовании только $1, но нарушает поведение $*.

Это позволяет делать хорошие вещи, как:

git showtool :/some nasty bug 
1

Geogrebrock ответ это хорошо, но может быть улучшена таким образом:

commit=$1 
shift 
git difftool $commit~1 $commit [email protected] 

Положите его в исполняемый файл (CHMOD + х) файл где-то в $ PATH ,

Теперь вы можете передать дополнительные аргументы, например, указать, какие файлы вы хотите видеть (и игнорировать другие):

$ git showtool 6a40ec6ffb9338b0548aefab92fded1bffb1648a -- src-cmn/ 

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

  • Нет связанных вопросов^_^