Git - проверка одного файла под открытым репозиторием

На сервере у меня есть открытый репозиторий, который является источником процесса разработки и упрощает развертывание в среде QA.

Итак, в post-receive он просто делает

GIT_WORK_TREE=/home/dev git checkout -f

Но по мере усложнения продукта должны произойти некоторые другие вещи. Теперь он обрабатывается deploy.sh script, который также отслеживается репозиторием. Поэтому я хочу, чтобы вместо проверки всего репозитория было проверять только deploy.sh и запускать его. Я думал, что-то вроде этого будет работать:

SOURCE_PATH="/home/dev"
GIT_WORK_TREE=$SOURCE_PATH git checkout deploy.sh
$SOURCE_PATH"/deploy.sh"

Но это не работает, давая ошибку:

error: pathspec 'deploy.sh' did not match any file(s) known to git.

Что я делаю неправильно? Или это просто невозможно сделать так?

Ответ 1

Как я объясняю в только один файл из git", вы не можете проверить только один файл без клонирования или выборки в первую очередь.

Но вы git show этот файл, что означает, что вы можете отправить его содержимое в файл /another/path./deploy.sh и выполнить этот файл.

git-show HEAD:full/repo/path/to/deploy.sh > /another/path./deploy.sh
/another/path./deploy.sh

Так как вы выполняете это из крючка после приема, git-show будет показывать последнюю версию файла deploy.sh.


Другой вариант - попробовать

 GIT_WORK_TREE=$SOURCE_PATH git checkout -- path/to/deploy.sh

И проверьте только этот файл непосредственно в рабочем дереве.

"--" помогает команде git понять, что это файл, а не другой параметр, например тег или именованная ветка.

Из теста OP AlexKey требуется, чтобы рабочее дерево было проверено (полностью) хотя бы один раз.

Ответ 2

Этот git show или аналогичный git cat-file blob подходит для текстовых файлов более или менее точно, но они бесполезны для двоичных файлов.

Лучший подход, который надежно работает для любых файлов и даже позволяет проверять целые папки:

git archive mybranch folder/file.txt --output result.tar

Он создает архив tar с нужным контентом, точно файл, который находится в исходном элементе управления. Работает отлично с двоичными файлами.

Единственное, что вам нужно сделать, это извлечь этот файл tar

tar -xf result.tar

Подробнее см. blogpost для более подробной информации