nameofrepo.git не является репозиторием git - PullRequest
1 голос
/ 27 марта 2012

Я пытаюсь настроить git на своем собственном сервере и отправить туда свой проект с помощью capistrano.

он все еще говорит:

fatal: '/ home / gitolite / repositories /iminrails.git 'не является репозиторием git, но я вижу iminrails.git в репозиториях каталогов на сервере.Поэтому я попробовал другой процесс, как перенести репо на сервер, но я все еще получаю эту ошибку.

ofer@debianruby:/var/www/iminrails$ scp -r /tmp/iminrails.git gitolite@example.com:/home/gitolite/repositories/
Enter passphrase for key '/home/ofer/.ssh/id_rsa':
bad command: scp -r -t -- /home/gitolite/repositories/
lost connection
ofer@debianruby:/var/www/iminrails$ git push origin master:refs/heads/master
Enter passphrase for key '/home/ofer/.ssh/id_rsa':
fatal: '/home/gitolite/repositories/iminrails.git' does not appear to be a git repository
fatal: The remote end hung up unexpectedly

1 Ответ

0 голосов
/ 02 апреля 2012

Если вы используете 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
...