мерзавец толкнуть смертельно

41766

Я как-то удалил весь каталог моей ветки кода. Я клонировал новый. Работало нормально, кроме нажатия.

~/workspace/wtf (mybranch)]$ git push origin mybranch  error: Cannot access URL [my url], return code 22 fatal: git-http-push failed  

Git Pull работает, хотя. Как я могу это исправить?

24
Пожалуйста, прочитайте это руководство [здесь] (http://www.parallelsymmetry.com/howto/git.jsp) и обратите внимание на вопрос о `http.receivepack`. hhh 12 лет назад 1

8 ответов на вопрос

33

Я сделал ошибку, используя https вместо ssh для свежей копии. С тех пор я вносил изменения и коммиты, но не мог настаивать по понятным причинам.

Чтобы восстановить, я просто изменил раздел [remote "origin"] в .git / config из

url = https://github.com/AIFDR/riab_core.git

в

url = git@github.com: AIFDR / riab_core.git

После этого я мог снова нажать.

Не нужно переходить на другой протокол, прочитайте мой ответ ниже, если вы хотите перейти через http. Basil A 13 лет назад 2
Согласитесь с Василием, это не нужно и невозможно в некоторых корпоративных средах с ограниченным доступом через брандмауэры и т. Д. 13 лет назад 1
... проблема в том, что `git-http-push failed`, я вижу, что операционная система пытается настроить что-либо через http или https, -1. hhh 12 лет назад 0
14
Eddie

Быстрее HTTP Push только с git - webDAV не требуется

Новая поддержка "smart-http" начиная с git 1.6.6. Новый метод позволяет передавать весь пакет сразу, а не как отдельные файлы.

Вы также можете использовать gitweb для предоставления просматриваемых URL-адресов в том же месте.

Примечание. Поскольку доступ контролируется Apache, вы можете добавить любые требования к аутентификации (htaccess или ldap и т. Д.) В настройку для каждого репозитория.

Этот ответ предполагает, что вы владеете удаленным сервером и хотите добавить / исправить поддержку http.

ПЕРВЫЙ: Проверьте журналы apache, вероятно, в разрешении отказано / невозможно найти ошибку, когда apache пытается выполнить сценарии cgi, поддерживаемые git-http.

Добавление поддержки HTTP в git

Просто создайте новый файл git_support.conf и включите его в apache (добавьте оператор include в httpd.conf)

# # Basic setup for git-http-backend #  SetEnv GIT_PROJECT_ROOT /opt/git_repos SetEnv GIT_HTTP_EXPORT_ALL SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER #IMportant !!! This could be your problem if missing  <Directory /opt/git> # both http_backend and gitweb should be somewhere under here AllowOverride None Options +ExecCGI -Includes #Important! Lets apache execute the script! Order allow,deny Allow from all </Directory>  # This pattern matches git operations and passes them to http-backend ScriptAliasMatch \ "(?x)^/git/(.*/(HEAD | \ info/refs | \ objects/(info/[^/]+ | \ [0-9a-f]/[0-9a-f] | \ pack/pack-[0-9a-f]\.(pack|idx)) | \ git-(upload|receive)-pack))$" \ /opt/git/libexec/git-core/git-http-backend/$1  # Anything not matched above goes to displayable gitweb interface ScriptAlias /git /opt/git/cgi-bin/gitweb.cgi/ 

Результатом является способность толкать / тянуть:

me@machine /tmp/eddies $ git pull Already up-to-date.  me@machine /tmp/eddies $ touch changedFile  me@machine /tmp/eddies $ git add .  me@machine /tmp/eddies $ git commit -am"commiting change" [master ca7f6ed] commiting change 0 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 changedFile  me@machine /tmp/eddies $ git push origin master Counting objects: 3, done. Delta compression using up to 8 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (2/2), 239 bytes, done. Total 2 (delta 1), reused 0 (delta 0) To http://mysecretdomain.com/git/eddies 0f626a9..ca7f6ed master -> master 

И вы можете просмотреть эти изменения в Интернете .. gitweb provides a browsable interface

Источник: http://repo.or.cz/w/alt-git.git?a=blob_plain;f=gitweb/README

Когда я запускаю ВАЖНУЮ строку о пользователе, строка 7, я получаю `` SetEnv принимает 1-2 аргумента, имя переменной среды и необязательное значение для передачи в CGI. '`- почему? hhh 12 лет назад 0
Я предполагаю, что значение пустое, поэтому setenv видит только 0 аргументов. Поскольку apache использует правило перенаправления, возможно, что REMOTE_USER пуст, поэтому мы получаем REDIRECT_RMEOTE_USER. Вы должны быть в состоянии сделать назначение необязательным, если RMEOTE_USER уже определен (или, скорее, пользователь REDIRECT пуст). http://httpd.apache.org/docs/2.0/mod/mod_setenvif.html#setenvif 12 лет назад 0
7
Basil A

Чтобы включить « git push » через http, вы должны включить WebDAV на веб-сервере. Чтобы сделать это для Apache Webserver, просто отредактируйте файл конфигурации:

vim /etc/httpd/conf/httpd.conf 

Затем найдите строку, начинающуюся с:

<Directory "/var/www/html"> 

Добавьте следующую строку сразу после нее:

Dav On 

Убедитесь, что в httpd.conf есть следующая строка без комментариев:

LoadModule dav_fs_module modules/mod_dav_fs.so 

После этого вы готовы. Перезапустите веб-сервер Apache, используя:

service httpd restart 

Также убедитесь, что все файлы репозитория git на сервере доступны для записи пользователю и группе pache: apache, используя:

chown -R apache:apache /var/www/html/your_git_repository 

В противном случае неправильная установка прав доступа приведет к «ошибке PUT: curl result = 22, HTTP code = 403» при выполнении «git push».

Теперь просто сделайте «git push» со своего клиентского компьютера, и все должно работать.

Обратите внимание, что если пользователи преодолеют это препятствие, но увидят ошибку в журналах apcahe о пакете получения http://stackoverflow.com/questions/792611/receive-pack-service-not-enabled-for-git/7150380#7150380 13 лет назад 0
Это будет работать, но DAV * не * требуется, и на самом деле работает намного медленнее, чем smart-http. 13 лет назад 2
4
The Mighty Rubber Duck

Вы не можете нажать на репозиторий, который вы клонировали через HTTP. Вам необходимо обновить URL-адрес до ssh://или git://типового URL-адреса.

Я использовал ту же команду клона. Это работало раньше, пока я не сделал неправильное удаление .... 14 лет назад 0
что у тебя с `git remote -v`? The Mighty Rubber Duck 14 лет назад 0
Не совсем верно. Вы можете вернуться в репозитории, предполагая, что DAV включен. 13 лет назад 0
Это неверно Git начиная с 1.6.6 поддерживает интеллектуальные HTTP-пуши и пуллы с использованием apache и git-http-backend. 13 лет назад 6
3
Deepak

Edit the following section of your .git/config file:

[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = http://git.repository.url/repo.git 

to

[remote "origin"] fetch = +refs/heads/*:refs/remotes/origin/* url = http://username:password@git.repository.url/repo.git 

Then try git push origin master.

Edit the authentication details in your config files for other repository URLs as required and push to the required branch.

Примечание: я использовал этот метод, и он решил мою проблему - однако я думал, что хранение пароля в файле конфигурации кажется неправильным, поэтому я его отключил (надеясь, что его попросят), и смог использовать его как таковой. chris 11 лет назад 0
`git remote set-url origin ...` также работает. Maximilian Hils 10 лет назад 0
1
gaspar

У меня была такая же проблема с операцией push с git-http-backend, конфигурацией аутентификации ldap.
Наконец я нашел решение и опишу его в этом вопросе о сбое сервера

Может быть, это поможет кому-то с подобной проблемой.

0
user201304010101

Great

i had other errors but it works!

i try to explain:

BUT how to hide the password from the text at the push message?

-1
sacha

Это также может произойти, если вы ввели неправильный пароль.

Я никогда не видел этого: сначала я всегда получаю `fatal: Authentication fail` Rup 12 лет назад 0

Похожие вопросы