Если вы используете SSH с учетной записью Gitolite, вы будете использовать конфигурацию SSH для использования принудительной команды .
См Гитолит и СШ
Если вы заглянете в файл author_keys, вы увидите записи, подобные этой (я, конечно, отрубил концы; они довольно длинные строки):
command="[path]/gl-auth-command sitaram",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA18S2t...
command="[path]/gl-auth-command usertwo",[more options] ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEArXtCT...
Сначала выясняется, какие из открытых ключей в этом файле соответствуют входящему логину. Это крипто, и я не буду вдаваться в подробности.
Как только совпадение найдено, оно запускает команду, указанную в этой строке; например, если бы я вошел в систему, он запустил бы [path]/gl-auth-command sitaram
.
Итак, первое, что следует отметить, это то, что такие пользователи не получают «доступ к оболочке», что хорошо!
Однако перед запуском команды sshd устанавливает переменную среды с именем SSH_ORIGINAL_COMMAND
, которая содержит фактическую команду git, отправленную вашей рабочей станцией. Это команда, которая была бы выполнена, если бы у вас не было command = part в файле авторизованных ключей.
Идея проста:
- нет доступа к интерактивной оболочке
- только команда git (поэтому ваша команда scp не команда git), она отклоняется.
Если вам нужно скопировать существующее локальное репозиторий Git на удаленный сервер Gitolite, см. «, перемещающее ранее существующие репозитории в gitolite »
позвольте gitolite создать его как совершенно новое хранилище , как описано в разделе « добавление пользователей и репо ».
cd клону на вашей рабочей станции.
Убедитесь, что все ветки правильные и нет лишних вещей, веток "temp" и т. Д.
теперь запустите эти две команды
git push --all git@server:reponame
git push --tags git@server:reponame