Невозможно напечатать git commit ha sh (с использованием git --pretty) при запуске внутри Makefile - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь получить версию (первые 7 символов коммита ha sh) файла, используя формат «git --pretty» внутри Makefile.

Ниже мой Makefile

#CUR_LOC_VERSION:= $(shell git log --pretty=format:%H -n1 -- | grep -o '^.\{7\}') # works
CUR_LOC_VERSION:= $(shell git log --pretty=format:%H -n1 -- ../inter/local.py | grep -o '^.\{7\}') # doesn't work, returns empty string
$(info $$CUR_LOC_VERSION is [${CUR_LOC_VERSION}])

Я ожидаю, что он покажет фиксацию ha sh, но он вернет пустую строку.

$CUR_LOC_VERSION is []

Но приведенная выше команда отлично работает при запуске непосредственно внутри оболочки (вместо этого вызова через Makefile.).

Любые указатели приветствуются.

Структура каталогов.

.
|-- inter
|   |-- local.py
|
`-- vhdl
    |-- Makefile

1 Ответ

2 голосов
/ 13 июля 2020

Я не могу объяснить, почему ваша текущая версия не работает. Но обратите внимание: если вы хотите получить конкретный c размер сокращенного ha sh, вы можете сделать это напрямую, не используя grep. Просто запустите:

git log -n1 --format=%h --abbrev=7

Параметр формата %h показывает сокращенное обозначение ha sh, а --abbrev говорит, сколько символов использовать.

На основании дополнительных исследований, приведенных выше, Я подозреваю, что ваш рабочий каталог, когда вы запускаете, не такой, как вы думаете. Если я запускаю git log -n1 -- nosuchfile (используя несуществующий файл), я не получаю никаких сообщений об ошибках, как я и ожидал; Я просто ничего не получаю. Это немного сбивает с толку, но заставляет меня думать, что ../inter/local.py не существует, когда вы запускаете эту команду git. Попробуйте добавить pwd к вашей команде shell, чтобы она распечатывала рабочий каталог перед запуском git:

CUR_LOC_VERSION:= $(shell pwd; git log --format=%h -n1 -- ../inter/local.py)

и посмотрите, что будет на выходе.

...