Существует ли способ вернуться к встроенному git-diff при сбое внешнего git-diff или способ вручную вызвать встроенный git-diff?

Вопрос или проблема

Я использую внешнюю программу для сравнения, но хотел бы создать резервный вариант для систем, где эта программа не установлена.

Я могу обернуть вызов моего внешнего инструмента сравнения в скрипт, который сначала проверяет его наличие, но не вижу, как я могу повторно вызвать обычное отображение git diff в случае неудачи. Что-то вроде следующего не работает в большинстве случаев:

#!/usr/bin/env sh
path="$1"
old_file="$2"
old_hex="$3"
old_mode="$4"
new_file="$5"
new_hex="$6"
new_mode="$7"

printf "<%s> " "$@"

patdiff="$HOME/.opam/_globals/bin/patdiff-git-wrapper"
if [ -x "$patdiff" ]; then
   "$patdiff" "$@"
else
   git diff "$old_hex" "$new_hex" -- "$path"
fi

Есть ли способ обойти это, не отказываясь и просто не изменяя мой параметр diff.external на каждой системе вручную?

У Git есть функция, которая позволяет запускать произвольный скрипт в вашем пути, например, вы создаете bash-скрипт (в вашем пути) с названием: git-hello. Вы можете просто ввести: git hello, и git выполнит ваш скрипт, передавая любые аргументы (доступные как $*)

Кратко – Переименуйте ваш скрипт в git-diffx (выберите ваше имя), затем после проверки на существование бинарного файла, вы можете вызвать:

git difftool $*

или

git diff $*

Ответ или решение

Теория

Git позволяет использовать внешние инструменты для сравнения различий между файлами через опцию diff.external. Однако, в случаях, когда внешний инструмент недоступен, возникает желание иметь возможность отступить к встроенному механизму git diff. Несмотря на наличие возможности создать скрипт, который проверяет присутствие внешнего инструмента перед его использованием, для некоторых пользователей остаётся вопрос, как автоматизировать использование стандартного git diff, если внешний инструмент недоступен.

Пример

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

#!/usr/bin/env sh
path="$1"
old_file="$2"
old_hex="$3"
old_mode="$4"
new_file="$5"
new_hex="$6"
new_mode="$7"

printf "<%s> " "$@"

patdiff="$HOME/.opam/_globals/bin/patdiff-git-wrapper"
if [ -x "$patdiff" ]; then
   "$patdiff" "$@"
else
   git diff "$old_hex" "$new_hex" -- "$path"
fi

Применение

Чтобы реализовать механизм резервного использования встроенного git diff без необходимости менять настройки diff.external на каждом компьютере, можно воспользоваться функциональностью Git по вызову пользовательских скриптов. Достаточно переместить ваш скрипт в каталог, который указан в переменной PATH, и назначить ему имя, например, git-diffx. Это позволит вам выполнять его командой git diffx.

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

git difftool $*

или

git diff $*

Таким образом, вы обеспечиваете себя стабильным резервным планом, который задействует встроенные инструменты Git для отображения различий, сохраняя баланс между функциональностью ваших рабочих процессов и универсальностью git на различных системах.

Оцените материал
Добавить комментарий

Капча загружается...