git पुश घातक असफल


24

मैंने किसी तरह अपनी कोड शाखा की पूरी निर्देशिका को हटा दिया। मैंने एक नया क्लोन किया। इसने धक्का देने के अलावा काम किया।

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

गिट पुल काम करता है, हालांकि। मेरे द्वारा यह कैसे किया जा सकता है?

git  push 

1
कृपया, इस मैनुअल को यहाँ पढ़ें और इस बिंदु पर ध्यान दें http.receivepack
hhh

जवाबों:


33

मैंने एक नई कॉपी के लिए ssh के बजाय https का उपयोग करने की गलती की। मैंने तब से संशोधन किए और कमिट किए लेकिन स्पष्ट कारणों से जोर नहीं दे सका।

पुनर्प्राप्त करने के लिए, मैंने सरल से [। दूरस्थ / मूल] अनुभाग को .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 के साथ तेज़ HTTP पुश - webDAV की आवश्यकता नहीं है

1.6.6 git के बाद से नया "स्मार्ट-http" समर्थन। नई विधि पूरे पैक को एक बार में प्रसारित करने की अनुमति देती है, न कि व्यक्तिगत फ़ाइलों के रूप में।

YOu एक ही स्थान पर ब्राउज़ करने योग्य URL प्रदान करने के लिए gitweb का उपयोग कर सकते हैं।

नोट: क्योंकि अपाचे द्वारा पहुंच को नियंत्रित किया जाता है आप प्रत्येक रिपॉजिटरी के लिए सेटअप में किसी भी प्रामाणिक आवश्यकताओं (htaccess या ldap, आदि) को जोड़ सकते हैं।

यह उत्तर आपको दूरस्थ सर्वर का मालिक मानता है और http समर्थन जोड़ना / ठीक करना चाहता है।

FIRST: अपाचे लॉग की जाँच करें, इसकी संभावना से इनकार किया गया / त्रुटि का पता लगाने में असमर्थ जब अपाचे गिट-http- समर्थित cgi स्क्रिप्ट को निष्पादित करने का प्रयास करता है।

गिट में HTTP समर्थन जोड़ना

बस एक नई git_support.conf फ़ाइल बनाएं, और इसे अपाचे में शामिल करें (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.it?a=blob_plain;f=gitweb/README


जब मैं उपयोगकर्ता के बारे में महत्वपूर्ण लाइन चलाता हूं, तो लाइन 7, मुझे मिलती है "SetEnv takes 1-2 arguments, an environment variable name and optional value to pass to CGI."- क्यों?
hhh

मुझे लगता है कि मान खाली है, इसलिए setenv केवल 0 तर्क देखता है। क्योंकि अपाचे एक पुनर्निर्देशन नियम का उपयोग करता है, यह संभव है कि REMOTE_USER खाली है, इसलिए हम REDIRECT_RMEOTE_USER हड़प लेते हैं। यदि RMEOTE_USER पहले से परिभाषित है (या इसके बजाय REDIRECT उपयोगकर्ता खाली है) तो आपको असाइनमेंट को वैकल्पिक बनाने में सक्षम होना चाहिए। httpd.apache.org/docs/2.0/mod/mod_setenvif.html#setenvif

7

Http पर " गिट पुश " को सक्षम करने के लिए, आपको वेबसर्वर पर WebDAV को सक्षम करना होगा। अपाचे वेबसर्वर के लिए ऐसा करने के लिए, बस विन्यास फाइल को संपादित करें:

vim /etc/httpd/conf/httpd.conf

इसके बाद शुरू होने वाली लाइन को खोजें:

<Directory "/var/www/html">

इसके बाद निम्न पंक्ति जोड़ें:

Dav On

सुनिश्चित करें कि आपके पास httpd.conf में निम्न पंक्ति भी है:

LoadModule dav_fs_module modules/mod_dav_fs.so

उसके बाद आप तैयार हैं। Apache Webserver का उपयोग करके पुनः प्रारंभ करें:

service httpd restart

यह भी सुनिश्चित करें कि सर्वर पर सभी गिट रिपॉजिटरी फाइल को पीच द्वारा लिखने योग्य बनाया जाए: एपाचे उपयोगकर्ता और समूह का उपयोग कर:

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

अन्यथा, सही अनुमतियां सेट करने में विफल रहने पर "GUT पुश" करते समय "PUT त्रुटि: कर्ल परिणाम = 22, HTTP कोड = 403" होगा।

अब बस अपने क्लाइंट मशीन से एक "गिट पुश" करें और सभी को काम करना चाहिए।


ध्यान दें, यदि प्रयोक्ता इस बाधा अतीत मिलता है, लेकिन apcahe लॉग में एक त्रुटि दिखाई के बारे में प्राप्त पैक stackoverflow.com/questions/792611/...

2
यह काम करेगा, लेकिन डीएवी की आवश्यकता नहीं है, और वास्तव में स्मार्ट-http की तुलना में बहुत धीमा प्रदर्शन करता है।

4

आप HTTP के माध्यम से क्लोन किए गए भंडार पर जोर नहीं दे सकते। आपको URL ssh://या किसी git://प्रकार का URL अपडेट करना होगा ।


मैंने उसी क्लोन कमांड का इस्तेमाल किया। इससे पहले कि यह काम करता था जब तक कि मैंने गलत विलोपन नहीं किया था ....

तुम्हारे पास क्या है git remote -v?
माइटी रबर डक

पूरी तरह से सच नहीं है। आप रिपॉजिटरी में वापस धकेल सकते हैं, यह मानते हुए कि डीएवी सक्षम है।

6
यह गलत है। Git 1.6.6 स्मार्ट http पुश का समर्थन करता है और Apache और git-http-backend का उपयोग करके खींचता है।

3

अपने .it / 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

मुझे git-http-backend, ldap ऑथेंटिकेशन कॉन्फिग के साथ पुश ऑपरेशन की भी यही समस्या थी।
अंत में मुझे समाधान मिल गया है और इस सर्वरफॉल्ट प्रश्न में इसका वर्णन करता हूं

शायद यह इसी तरह की समस्या वाले किसी व्यक्ति की मदद करेगा।


0

महान

मैं अन्य त्रुटियों था, लेकिन यह काम करता है!

मैं समझाने की कोशिश करता हूं:

  • Apache2 और webdav के साथ एक ubuntu सर्वर इंस्टॉल करें
  • को देखो http://www.mabishu.com/blog/2011/02/09/setup-a-remote-git-repository-using-http-with-push-support-and-digest-auth/ जानकारी के लिए
  • ग्राहक पर क्लोन -> बिल्कुल सही!
  • कुछ बदलो....
  • धक्का -> विफल रहा
  • सर्वर पर स्वामी बदलें
  • त्रुटि "PUT त्रुटि: कर्ल परिणाम = 22, HTTP कोड = 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 कार्यों से जवाब का इस्तेमाल किया ।

लेकिन पुश मैसेज पर टेक्स्ट से पासवर्ड कैसे छिपाएं?


-1

ऐसा तब भी हो सकता है जब आपने कोई गलत पासवर्ड डाला हो।


मैंने कभी नहीं देखा है कि: मुझे हमेशा fatal: Authentication failedपहली बार मिलता है
Rup
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.