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 для более подробной информации