Мне разместили проект на git.debian.org (alioth), и я хотел бы настроить постполучить рычаг для обновления зеркала репозитория на http://gitorious.org
Я предполагаю, что должен буду использовать git push --mirror gitorious
Теперь, мне должны будут разрешить Alioth на gitorious для нажатия успешно выполняться. Как я делаю это?
Я предполагаю, что должен настроить пользователя на gitorious и создать ssh ключ для него. И затем когда я выполняю в нажатии мерзавца постполучить рычаг, удостоверьтесь, что этот ssh ключ используется.
Я мог использовать a ~/.ssh/config
но проблема состоит в том, что многие пользователи могут спешить alioth, и все должны были бы войти в систему и настроить ~/.ssh/config
. Вместо этого я хотел бы иметь параметр командной строки или переменную среды для сообщения ssh который ключ использовать. Я могу сделать это?
Кроме того, у Вас есть другие идеи, как зеркальное отражение может быть достигнуто? И, действительно ли возможно настроить его наоборот (gitorious спешащий alioth)?
Ответ можно найти в справочном руководстве git .
GIT_SSH
Если эта переменная среды установлена, то git fetch и git push будут использовать эту команду вместо ssh, когда им нужно подключиться к удаленной системе. Команде
$ GIT_SSH
будет дано ровно два аргумента: имя пользователя @ хост (или просто хост) из URL-адреса и команда оболочки для выполнения в этой удаленной системе.Чтобы передать параметры программе, которую вы хотите указать в
GIT_SSH
, вам нужно будет обернуть программу и параметры в сценарий оболочки, а затем установитьGIT_SSH
для ссылки на оболочку. сценарий.Обычно проще настроить любые желаемые параметры через ваш личный файл
.ssh / config
. Дополнительные сведения см. В документации по ssh.
Итак, мне нужно написать сценарий оболочки, я пишу этот push-gitorious.sh
сценарий:
#!/bin/sh
if [ "run" != "$1" ]; then
exec ssh -i "$GITORIOUS_IDENTITY_FILE" -o "StrictHostKeyChecking no" "$@"
fi
remote=YOUR_SSH_GITORIOUS_URL
echo "Mirroring to $remote"
export GITORIOUS_IDENTITY_FILE="`mktemp /tmp/tmp.XXXXXXXXXX`"
export GIT_SSH="$0"
cat >"$GITORIOUS_IDENTITY_FILE" <<EOF
YOUR SSH PRIVATE KEY
EOF
cat >"$GITORIOUS_IDENTITY_FILE.pub" <<EOF
YOUR SSH PUBLIC KEY
EOF
#echo git push --mirror "$remote"
git push --mirror "$remote"
rm -f "$GITORIOUS_IDENTITY_FILE"
rm -f "$GITORIOUS_IDENTITY_FILE.pub"
exit 0
Конечно, вы должны ввести закрытый ключ (открытый ключ включен в сценарий только для справки. Вам также необходимо заполнить ужасный URL.
В обработчике post-receive вы должны указать:
path/to/push-gitorious.sh run
Параметр запуска важен, иначе он запустит ssh напрямую.
Предупреждение: идентификация удаленного хоста не проверяется. Вы можете удалить эту опцию из командной строки ssh и настроить known_hosts
, если хотите. В этом случае использования я не думаю, что это важно.