git push to remote repository "Не удалось прочитать из удаленного репозитория"
Я искал некоторое время, но не могу найти решение своей проблемы.
У меня есть сервер, к которому я могу подключиться через ssh с именем пользователя git
и локальный репозиторий git.
Теперь я хочу перенести свой локальный репозиторий во вновь созданный на Сервере.
Вот что я сделал:
- создал Git-репозиторий в
/home/git/test.git
- инициализировал хранилище как голое
- добавил удаленный репозиторий на локальную машину
git remote add test ssh://git@serverIp:/home/git/test.git
- теперь я выполнил команду push:
git push test master
Я всегда получаю
fatal: could not read from remote repository
Please make sure you have the correct access rights
and the repository exists.
Я работаю на локальной машине Windows 7 и хочу загрузить на сервер Linux.
Я могу войти через SSH с git
пользователь. Я также пытался сделать это как root
пользователь (чтобы заставить вещи работать один раз) с тем же результатом.
Меня никогда не просят за ssh password
,
Я действительно не знаю, что я делаю неправильно.
Прежде чем вы назвали это дубликатом, я много искал эту проблему, и, похоже, никто не говорил об этой проблеме.
Обновить:
- "which git" возвращает /usr/bin / git
- PATH echo включает в себя /usr/bin
- Файлы id_rsa и id_rsa.pub все настроены и не содержат парольную фразу
- ssh git@serverIp, который также работает git-receive-pack и возвращает /usr/bin / git-receive-pack
- ssh git@serverIp ls /home/git/test.git работает
- все соответствующие каталоги chmod 755
- Git является владельцем репозитория
- В файле auth.log нет новых записей о проверенной команде push
- GIT_TRACE=2 git push test master возвращает:
'C: \ Program Files (x86) \ PuTTY \ plink.exe' '-batch' 'git @ serverIp' 'git-receive-pack' \ '' / home / git / test.git '\' '' fatal: Не удалось прочитать из удаленного хранилища. Пожалуйста, убедитесь, что у вас есть правильные права доступа и хранилище существует.
4 ответа
В этом случае использование openssh поверх putty было ключевым.
Оригинальный ответ (советы по отладке)
Я могу войти через SSH с
git
пользователь.
Это означает, что это работает:
ssh git@serverIp
У вас есть HOME
переменная определена, и ssh открытый / закрытый ключи (id_rsa
/ id_rsa.pub
) в %HOME%/.ssh/
,
Этот вопрос предлагает другой URL:
git remote set-url test git@serverIp:/home/git/test.git
Убедитесь, что вы создали git-репозиторий как git (а не как root, когда создавали учетную запись git, как в этом вопросе). ssh git@serverIp "which git"
должен вернуть путь к исполняемому файлу git.
Проверьте также, что все родительские каталоги имеют соответствующие x
(выполнить) бит, установленный для пользователя git
или группа gitgroup
, Бег ls -ld /home /home/git /home/git/test.git
,
Кроме того, получить больше информации для команды git можно с помощью:
git push --verbose
или же:GIT_TRACE=2 git push test master
Если у вас есть закрытый ключ ssh с паролем, лучше сначала протестировать эти команды ssh с закрытым ключом ssh, не защищенным паролем, чтобы выяснить, сохраняется ли проблема.
Или вы можете сохранить этот защищенный паролем ключ SSH, но дважды проверьте свой .bashrc
как в этом ответе.
Для любой проблемы с ssh-соединением (где требуется пароль git), проверьте:
/var/log/auth.log
,- сеанс отладки sshd
В вашем случае, так как он работает с ssh git@serverIp
(интерактивная безопасная оболочка), но не с git (которая открывает неинтерактивную безопасную оболочку), взгляните на этот поток, который ссылается на этот:
Когда ssh запускается из командной строки, запускается неинтерактивная оболочка без авторизации.
Тем не мение...bash
не использует$BASH_ENV
в этом случае, так что установите его в~/.ssh/environment
(например, для/etc/profile
) не помогает
То, что делает bash, является источником/etc/bashrc
а также~/.bashrc
,
Удостоверься что /etc/profile
действительно определяет путь для git
, поскольку здесь можно использовать учетную запись, не входящую в систему (похоже, что здесь ssh git@serverIp "which git"
работал, и ssh git@serverIp "git --version"
должен тоже).
Но проверьте также правильный вопрос, и проверьте chmod 755
на /home
, /home/git
а также /home/git/test.git
,
Вы также можете проверить свою личность SSH, выполнив:
$ ssh-add -L
У меня была похожая проблема. В моих именах был неправильный ключ, не помню почему. Я просто удаляю все свои идентификационные данные (возможно, вам нужно будет снова добавить ключи):
$ ssh-add -D
Тогда я сделал push/pull без проблем.
У меня лично было 2 разные проблемы с этим:
plink
(который используется git на Windows) не принимаетid_rsa
закрытый ключ в формате OpenSSH 2 => мне пришлось конвертировать его (используяputtygen
) для шпатлевки собственной.ppk
форматировать и прикреплять через Git Extensions "Remotes
"диалогЯ неправильно указал путь к папке git, потому что мой сеанс ssh был изолирован (это может быть неверное слово), и я указал, что это был мой FTP "
root
" как "/
"пока это было"/home/www/username/
вместо
Я все это понял, используя GIT TRACE=2
как описано выше, а также с помощью procmon
определить точную командную строку для plink
а потом поиграть с ним, добавив-v
" option (" подробный ").
Установите для переменной среды GIT_SSH полный путь TortoisePlink.exe
(возможно, вам придется скачать TortoiseGit для этого) вместо PuTTY's plink.exe
, Это позволит всплывающему диалоговому окну запрашивать информацию, например, подтвердить отпечаток пальца или ввести пароль. Если вы используете plink.exe
через Git вы не можете вводить ответы на приглашения plink.exe, которые, если есть какие-либо запросы, приведут к фатальной ошибке, которую вы видели.