Ручная однострочная команда
Вы можете вызвать meld
для трех версий файла, не используя временные файлы, сочетая синтаксис <(cmd)
в bash с вашей идеей git show
:
meld <(git show master:file) <(git show branch1:file) <(git show branch2:file)
Появится файл с файлами dev/fd/61
, /dev/fd/62
и /dev/fd/63
, относящимися к файлу в каждой из трех ветвей. Имена не очень дружелюбны, но вы привыкнете к этому. Дело в том, что он покажет то, что вы хотите увидеть.
Создание сценариев
Очевидным следующим шагом является упрощение синтаксиса с помощью скрипта:
Создать файл ~/bin/git-meld3
(или где-либо еще в вашей переменной PATH):
#!/bin/bash
meld <(git show $1:$4) <(git show $2:$4) <(git show $3:$4)
Сделать его исполняемым:
chmod +x ~/bin/git-meld3
Назовите это:
git meld3 master branch1 branch2 myfilename
Команда работает с любым коммитом:
git meld3 master 36d1cf756 HEAD^^^ myfilename
Более гибкий скрипт
Этот ~/bin/git-meld
скрипт принимает два или три коммита:
#!/bin/bash
if [[ $# -eq 3 ]]; then
meld <(git show $1:$3) <(git show $2:$3)
elif [[ $# -eq 4 ]]; then
meld <(git show $1:$4) <(git show $2:$4) <(git show $3:$4)
else
echo Usage: git meld committish1 committish2 [committish3] file >&2
exit 1
fi
PS
На моей собственной машине я должен вызвать meld следующим образом: python2.6 /usr/bin/meld
, возможно, потому что он установлен неправильно, так что это мой настоящий ~/bin/git-meld3
скрипт:
#!/bin/bash
python2.6 /usr/bin/meld <(git show $1:$4) <(git show $2:$4) <(git show $3:$4)
Мельд стар! В сценарии написано, что для него требуется Python 2.4, но он не может быть скомпилирован с 2.7 или 3. К счастью, он работает с 2.6, поэтому я смог протестировать свое решение.