Следим за изменениями в git-репозитории

Ниже представлен sh-скрипт, который проверяет, были ли какие-то изменения push’нуты в репозиторий (сверяя hash в локальном репозитории и hash на сервере). Если они не совпадают, то выполняет pull и проверяет были ли изменены (git diff --name-only) нужные файлы (grep .*\.js).

Скрипт должен запускаться из директории, где находится локальная версия репозитория.

#!/bin/sh
 
REMOTEHASH="$(git ls-remote | grep heads/trunk$ | sed 's/\s.*$//')"
 
LOCALHASH="$(git log -n 1 | grep -e "[0-9a-f]\{40\}" -o)"
 
if [ $LOCALHASH != $REMOTEHASH ]
then
	git pull --rebase
	DIFF="$(git diff --name-only $LOCALHASH $REMOTEHASH | grep .*\.js)"
 
	if [ "$DIFF" = "" ]
	then
		echo 'js file are not changed'
	else
		echo 'js files where changed'
	fi
fi

Немного пояснений. git ls-remote выводит имя всех доступных веток и хэши последнего коммита в каждой ветке. grep heads/trunk$ в моем случае берет нужную ветку. sed 's/\s.*$//' убирает все после первого пробела, оставляя только хэш.

Хэш в локальном репозитории вытягивается через git log -n 1 (последний коммит). grep’ом из полученной строки вырезается только хэш (см. описание параметра -o).

Вместо echo 'js files where changed' может быть любой код, который необходимо выполнить с измененными файлами — запустить тесты, запустить анализатор, сделать бекап и т.д.

, , ,

Оставить комментарий

Top ↑ | Main page | Back