git diff - внешний просмотрщик - получить все результаты сравнения - PullRequest
4 голосов
/ 11 августа 2009

Когда настроен внешний diff, результаты отображаются для каждого файла, то есть для просмотра различий для следующего файла, который необходимо закрыть в настоящее время запущенный просмотрщик diff.

Есть ли способ заставить git порождать все процессы просмотра различий параллельно?

Если я просто создаю процесс из внешнего скрипта diff, очевидно, git удаляет временные файлы, которые он использует для сравнения.

Итак

#!/usr/bin/python
import subprocess
import sys
p = subprocess.Popen(('/usr/bin/meld', sys.argv[2], sys.argv[5]))
#p.wait()

не работает, с отображением «Не удалось прочитать из» /tmp/.diff_VlLwKF'

Однако, если я раскомментирую

#p.wait()

все работает нормально, но опять же, это последовательное порождение, а не параллельное.

Спасибо

Ответы [ 2 ]

6 голосов
/ 18 августа 2009

Я задал похожий вопрос по SO, желая открыть файлы сравнения во вкладках в BeyondCompare. Я придумал это:

for name in $(git diff --name-only $1); do git difftool $1 $name & done

Получает список измененных файлов и вызывает внешний инструмент сравнения в фоновой задаче для каждого отдельного файла.

Ознакомьтесь с подробностями здесь и узнайте, как я могу упростить их использование. Будучи новичком в bash, я бы хотел услышать о любых улучшениях ...

Редактировать 1: добавлен необязательный параметр (например, '--staged')
Изменить 2: добавлен псевдоним git ( см. Ссылку ).

0 голосов
/ 18 июня 2012

Вместо того, чтобы вызывать difftool для каждого файла, вы можете позволить git сделать это за вас, начиная с ( git 1.7.11 , июнь 2012):
Теперь он может различать каталоги (т.е. отображать все файлы для сравнения перед открытием difftool)

См. "git difftool для сравнения каталогов? "

Так что, возможно, теперь вы можете использовать один вызов с директорией diff.

...