Как правильно сделать GIT тянуть в SH? - PullRequest
0 голосов
/ 12 июня 2018

Мне нужно создать скрипт, который будет делать пулл-запрос.В настоящее время мой код:

#!/bin/sh
# -*- coding: utf-8 -*-
cd "/var/www/project" 

GIT_SSH_COMMAND='ssh -i /var/www/deploy/access-key -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null'

git fetch origin
git reset --hard origin/dev

Дело в том, что каждый раз, когда я получаю:

Не удалось создать каталог '/var/www/.ssh'.Не удалось добавить ключ хоста RSA для IP-адреса «104.192.143.1» в список известных хостов (/var/www/.ssh/known_hosts).git@bitbucket.org: В доступе отказано (publickey).Неустранимый: Не удалось прочитать из удаленного хранилища.

Под моим обычным пользователем ключ работает нормально.Можно ли как-то указать know_hosts файл от существующего системного пользователя?

1 Ответ

0 голосов
/ 12 июня 2018

Чтение строки:

GIT_SSH_COMMAND='ssh -i ...'

- это , предназначенное для предоставления ключа ssh и нескольких параметров ssh для команды ssh, когда Git - или, более конкретно, git fetch -использует ssh для вызова другого Git по URL-адресу, основанному на ssh.

Эта строка неисправна (или отсутствует другая строка), поскольку, как написано, она устанавливает переменную , не экспортируя ее также всреда для git fetch.Если переменная уже существует в среде, этот конкретный дефект не является проблемой, поскольку уже экспортированные переменные продолжают экспортироваться;но, как и в более типичном случае, переменная еще не существует, она просто создает переменную локально.

Существует два различных способа ее исправить: либо поместить переменную-установка перед самой командой, все в одной логической строке, например:

GIT_SSH_COMMAND='ssh ...' git fetch

Или добавьте команду export, либо в строке, которая задает переменную, либо вскоре после этого:

export GIT_SSH_COMMAND='...'

или:

GIT_SSH_COMMAND='...'
export GIT_SSH_COMMAND

Обратите внимание, что установка переменной в той же строке, что и команда, означает ее установку в среде этой конкретной команды, но не дольше этой.Установка его с явным export означает установить его сейчас и сохранять его таким, пока он не будет изменен или оболочка не выйдет, в зависимости от того, что произойдет раньше:

$ USER=hello sh -c 'echo $USER'
hello
$ echo $USER
torek
$ export USER=hello
$ sh -c 'echo $USER'
hello
$ echo $USER
hello
...