Я написал bash-скрипт с именем git_diff_parent
, который при передаче дескриптора фиксации выполняет git diff commit~1 commit
; другими словами, он отличается от своего предка без указания commit~1
в командной строке. Я делаю это, анализируя командную строку git, находя, какой аргумент является строкой фиксации (используя git cat-file -t
), заменяя его на commit~1 commit
, а затем передавая новый список аргументов в git diff
. Я присвоил этому сценарию псевдоним /etc/gitconfig
, поэтому я могу выполнить эту команду как git diff-parent
:
[alias]
diff-parent = !git_diff_parent
Это почти работает, за исключением случаев, когда я пытаюсь сравнить отдельный файл из места, отличного от каталога репозитория верхнего уровня, например:
% pwd
/home/myhome/github/my-branch/rtl
% git diff-parent branch -- mycode.sv
<no output>
% git diff-parent branch -- rtl/mycode.sv
<diff output appears>
Чтобы отладить это, я добавил pwd
в свой скрипт, чтобы увидеть рабочий каталог скрипта. О чудо, он всегда запускается из каталога верхнего уровня (/home/myhome/github/my-branch
), а не из подкаталога, в котором я нахожусь. Я даже пробовал git -C . diff-parent ...
безрезультатно.
Итак, есть ли способ запустить мой псевдоним из текущего рабочего каталога?