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


24

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

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

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

git  push 

1
Пожалуйста, прочитайте это руководство здесь и обратите внимание на смысл http.receivepack.
чч

Ответы:


33

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

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

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

в

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

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


2
Не нужно переходить на другой протокол, прочитайте мой ответ ниже, если вы хотите перейти через http.
Василий А

1
Согласитесь с Бэзилом, это не нужно и невозможно в некоторых корпоративных средах, которые имеют ограниченный доступ через брандмауэры и т. Д.

... проблема в том git-http-push failed, что я вижу, что операционная система пытается установить что-то через http или https, -1.
HHH

14

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

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

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

Примечание. Поскольку доступ контролируется Apache, вы можете добавить любые требования Auth (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]{2}/[0-9a-f]{38} | \
                                 pack/pack-[0-9a-f]{40}\.(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 предоставляет интерфейс для просмотра

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


Когда я запускаю ВАЖНУЮ строку о пользователе, строка 7, я получаю "SetEnv takes 1-2 arguments, an environment variable name and optional value to pass to CGI."- почему?
чч

Я думаю, это значение пустое, поэтому setenv видит только 0 аргументов. Поскольку apache использует правило перенаправления, возможно, REMOTE_USER пуст, поэтому мы получаем REDIRECT_RMEOTE_USER. Вы должны быть в состоянии сделать назначение необязательным, если RMEOTE_USER уже определен (или, скорее, пользователь REDIRECT пуст). httpd.apache.org/docs/2.0/mod/mod_setenvif.html#setenvif

7

Чтобы включить « 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 о файле receive-pack stackoverflow.com/questions/792611/…

2
Это будет работать, но DAV не требуется и на самом деле работает намного медленнее, чем smart-http.

4

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


Я использовал ту же команду клона. Это работало раньше, пока я не сделал неправильное удаление ....

что у тебя есть git remote -v?
Могучая резиновая утка

Не совсем верно. Вы можете вернуться к репозиториям, предполагая, что DAV включен.

6
Это неверно Git начиная с версии 1.6.6 поддерживает интеллектуальные http-пуши и пуллы с использованием apache и git-http-backend.

3

Отредактируйте следующий раздел вашего файла .git / config:

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

в

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

Тогда попробуй git push origin master.

Измените данные аутентификации в файлах конфигурации для других URL-адресов хранилища, как требуется, и нажмите на нужную ветку.


Примечание: я использовал этот метод, и он решил мою проблему - однако я думал, что сохранение пароля в файле конфигурации кажется неправильным, поэтому я его отключил (надеясь, что его попросят), и смог использовать его как таковой.
Крис

git remote set-url origin ...работает так же.
Максимилиан Хилс

1

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

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


0

большой

у меня были другие ошибки, но это работает!

я пытаюсь объяснить:

  • установить сервер Ubuntu с Apache2 и WebDAV
  • Посмотрите на http://www.mabishu.com/blog/2011/02/09/setup-a-remote-git-repository-using-http-with-push-support-and-digest-auth/ для деталей
  • клон на клиенте -> Отлично!
  • изменить что-то ....
  • нажать -> не удалось
  • сменить владельца на сервере
  • Ошибка "PUT error: curl result = 22, HTTP code = 403" исчезла ..
  • сейчас только говорит git-http-push не удалось
  • serverlog: Could not LOCK /path/to/www/gitproject/refs/heads/master due to a failed precondition (e.g. other locks)
  • я использовал ответ от user1520409ist works.

НО как скрыть пароль от текста при нажатии на сообщение?


-1

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


Я никогда не видел этого: я всегда получаю fatal: Authentication failedпервым
Rup
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.