git http push через WebDAV — что, если в моем имени пользователя есть @?

Мой провайдер веб-хостинга позволяет мне получить доступ к моему веб-пространству через WebDAV, поэтому я решил создать там репозиторий git, просто чтобы посмотреть, что произойдет. Клонирование репозитория только для чтения работает нормально, как "git clone http://my.server.com/repo.git" просто использует стандартный HTTP-транспорт.

Проблемы возникают, когда я пытаюсь использовать WebDAV, потому что мой идентификатор пользователя «[email protected]», и я должен использовать порт 2077. Это означает, что я должен сделать что-то вроде

git config remote.origin.pushurl http://[email protected]@my.server.com:2077/repo.git

и два знака @ в URL-адресе должны вызывать проблемы, потому что «git push origin master» сообщает об «ошибке 22».

Я попытался создать запись в файле .netrc

machine    my.server.com
login      [email protected]
password   ****

но это, похоже, не помогло.

Я также пытался заменить первый «@» на «%», «\@» и «% 40», но ничего из этого не сработало.


person kbro    schedule 05.01.2010    source источник
comment
Мне было интересно, придумали ли вы когда-нибудь решение этой проблемы, поскольку я столкнулся с проблемой и узнаю порты ... Я у того же провайдера.   -  person mmc    schedule 04.06.2010


Ответы (2)


Текущая версия git не обрабатывает процентное экранирование в имени пользователя и пароле. Вчера я отправил патч, чтобы исправить это (по крайней мере, для URL-адресов HTTP), так что это может быть исправлено в ближайшее время. С патчем вы сможете получить доступ к WebDAV с помощью:

git config remote.origin.pushurl http://user%[email protected]:2077/repo.git

Однако у вас может быть другая проблема, связанная с проблемой с libcurl> 7.16 (см. примечание в «git help http-push»), когда я пишу.

person Gabriel    schedule 13.11.2010

Если URI, используемый WebDAV, соответствует унифицированному идентификатору ресурса (URI): общий синтаксис (rfc3986), не должно быть @ в userinfo

 authority     = [ userinfo "@" ] host [ ":" port ]
 userinfo      = *( unreserved / pct-encoded / sub-delims / ":" )
 pct-encoded   = "%" HEXDIG HEXDIG

 unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
 sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
               / "*" / "+" / "," / ";" / "="


 reserved      = gen-delims / sub-delims
 gen-delims    = ":" / "/" / "?" / "#" / "[" / "]" / "@"

Так ты пробовал только с http://[email protected]:2077/repo.git?

person VonC    schedule 05.01.2010
comment
Я попробовал dav://[email protected]:2077/ на своем ноутбуке с Ubuntu еще до того, как добрался до Git. Это не сработало, и потребовалось несколько бесплодных часов, чтобы обнаружить, что мне нужен dav://my.server.com:2077/, затем введите [email protected] и пароль при появлении запроса. Тот, кто написал этот фрагмент cPanel-11 (используемый моим хостинг-провайдером), очевидно, не думал о RFC-совместимых именах пользователей :-( - person kbro; 06.01.2010
comment
Так что мой вопрос на самом деле не имеет ничего общего с Git. Реализация WebDAV на моем сервере использует имена пользователей, которые не соответствуют RFC 3986, поэтому, если она не поддерживает символ замены для @, то мне конец! - person kbro; 06.01.2010
comment
@kbro Боюсь, это начинает выглядеть именно так ... И я не знаю ни о какой замене знака at в имени пользователя id. - person VonC; 06.01.2010
comment
Я попробовал все, что вы перечислили в подразделах, а также большинство общих разделов. Нет радости. Я попросил своего провайдера веб-хостинга связаться с разработчиками cPanel, чтобы сообщить о проблеме. - person kbro; 06.01.2010
comment
@kbro: извините, до этого дошло. Я надеюсь, что они найдут какое-то решение или обходной путь. - person VonC; 06.01.2010