मैं इस नंगे भंडार को क्यों नहीं धकेल सकता?


283

क्या आप बता सकते हैं कि इस वर्कफ़्लो में क्या गलत है?

$ git init --bare bare
Initialized empty Git repository in /work/fun/git_experiments/bare/
$ git clone bare alice
Cloning into alice...
done.
warning: You appear to have cloned an empty repository.
$ cd alice/
$ touch a
$ git add a
$ git commit -m "Added a"
[master (root-commit) 70d52d4] Added a
 0 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
$ git push
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to '/work/fun/git_experiments/bare'

git pushहमेशा उस रिपॉजिटरी पर नहीं जाऊँगा जिसे मैंने क्लोन किया था?


क्या आपको धक्का देने के लिए शाखा निर्दिष्ट नहीं करनी चाहिए?
'21

3
एक क्लोन के बाद नहीं !!! समस्या ठीक हो जाने के बाद, यह बहुत अच्छा काम करता है और शाखा को निर्दिष्ट करने की कोई आवश्यकता नहीं है ... बस एक खाली रिपॉजिटरी के पहले चेकआउट पर यह होता है जो बहुत ही कष्टप्रद है ... उन्हें इस मुद्दे को ठीक करना चाहिए।
डीन हिलर

आशा है कि यह पोस्ट किसी के लिए उपयोगी होगी जब ऊपर करने की कोशिश की जा रही होगी- samranga.blogspot.com/2015/07/… प्रश्न में त्रुटि को तब भी पॉप किया जा सकता है जब किसी पहले से ही स्थानीय प्रोजेक्ट से एक बिट बिटबकेट रिपॉजिटरी बनाने की कोशिश की जाए
समिथा चतुरंग

जवाबों:


483

हां, समस्या यह है कि "नंगे" में कोई कमिट नहीं हैं। यह केवल पहली प्रतिबद्ध के साथ एक समस्या है, अगर आप ऑर्डर में नंगे (नंगे, एलिस) बनाते हैं। करने की कोशिश करो:

git push --set-upstream origin master

यह केवल पहली बार आवश्यक होगा। बाद में इसे सामान्य रूप से काम करना चाहिए।

जैसा कि क्रिस जॉन्सन ने बताया, यदि आपके पुश.डाल्ट को अनुकूलित किया गया था, तो आपको यह समस्या नहीं होगी। मुझे अपस्ट्रीम / ट्रैकिंग पसंद है।


1
मैं कर रहा हूँ sudo apt-get upgrade git-coreऔर sudo apt-get upgrade gitऔर यह लगता है कि कोई अद्यतन आवश्यक है। git --versionरिटर्न 1.7.3.1। किसी भी विचार क्या याद आ रही है? मैं मानता हूँ कि वर्तमान में apt-get updateमेरे लिए काम नहीं करता है, लेकिन यह बहुत पहले नहीं था।
ripper234

1
@ ripper234: git का वर्तमान संस्करण 1.7.5.3 है आप या तो असुविधा के साथ रह सकते हैं, एक अलग वर्कफ़्लो का उपयोग कर सकते हैं या नवीनतम git को मैन्युअल रूप से w / o debian / ubuntu पैकेजिंग स्थापित कर सकते हैं।
सेठ रॉबर्टसन

आह ठीक है, मैं भूल जाता हूं कि सॉफ्टवेयर पैक होने से पहले कुछ समय लेता है। मैं एक linux noob हूँ, जो विंडोज से आता है, और यहाँ क्लिक-टू-इंस्टॉल-नवीनतम-संस्करण है।
ripper234

9
"हाल के संस्करण में यह समस्या नहीं है" के बारे में: यहां तक ​​कि हाल के संस्करणों में, पुश के लिए डिफ़ॉल्ट से नहीं लगता है कि इससे बदला गया है matching; हो सकता है कि आपने अपने push.defaultमें upstream/ tracking(या current) को सेट किया हो ~/.gitconfig?
क्रिस जॉन्सन

4
git push origin master:masterइसे स्पष्ट करने की कोशिश करें । यदि वह काम नहीं करता है, तो यह देखने के लिए जांचें कि आप किस शाखा में हैं: git branchशायद आपने पहले कमिट नहीं किया है या आपने मास्टर के अलावा किसी अन्य ब्रांच पर कमिट किया है।
सेठ रॉबर्टसन

43

अगर तुम:

 git push origin master

यह नंगे रेपो को धक्का देगा।

ऐसा लगता है कि आपका ऐलिस रेपो सही तरीके से ट्रैकिंग नहीं कर रहा है।

cat .git/config

यह डिफॉल्ट रिमोट और ब्रांच को दिखाएगा।

अगर तुम

 git push -u origin master

आपको उस रिमोट और ब्रांच को ट्रैक करना शुरू कर देना चाहिए। मुझे यकीन नहीं है कि अगर वह विकल्प हमेशा पकड़ में रहा है।


30

इस संबंधित प्रश्न के उत्तर ने मेरे लिए समाधान प्रदान किया ... यह सिर्फ एक गूंगा गलती थी:

पहले करने के लिए याद रखें!

https://stackoverflow.com/a/7572252

यदि आपने अभी तक अपने स्थानीय रेपो के लिए प्रतिबद्ध नहीं किया है, तो धक्का देने के लिए कुछ भी नहीं है, लेकिन आपके द्वारा वापस प्राप्त जीआईटी त्रुटि संदेश आपकी बहुत मदद नहीं करता है।


17
git push --all

एक नया नंगे भंडार के लिए सब कुछ पुश करने के लिए विहित तरीका है।

एक ही काम करने का दूसरा तरीका यह है कि आप अपने नए, गैर-नंगे भंडार का निर्माण करें और फिर एक नंगे क्लोन बनाएं

git clone --bare

तो उपयोग करें

git remote add origin <new-remote-repo>

मूल (गैर-नंगे) भंडार में।


... तो आपने जवाब को नीचा दिखा दिया? यह है मानक तरीका एक नया, नंगे भंडार के लिए सब कुछ पुश करने के लिए। यदि यह आपके लिए काम नहीं करता है, तो कुछ अन्य समस्या है।
ईबेनेटर

तुम सही हो, मुझे शायद नहीं करना चाहिए, मुझे पता है कि तुम सिर्फ मदद करने की कोशिश कर रहे थे। यदि आप इसे संपादित करते हैं तो मैं अपने डाउनवोट को पूर्ववत कर दूंगा।
ripper234

धन्यवाद, उसी कार्य को पूरा करने के लिए इसे दूसरे तरीके से संपादित किया।
ईबेनेटर

आपके उत्तर ने मुझे धन्यवाद देने में मदद की;) लेकिन कमांड के अंत में, रास्ता इस तरह मौजूद होना चाहिए: git push --all ../test_repoकमांड के अंत में रेपो का URL;)
मेटाफैनियल

@Metafaniel यह निर्भर करता है कि आपने इसे कैसे सेट किया है। यदि आपके स्थानीय रेपो में पहले से ही रिमोट ठीक से कॉन्फ़िगर किया गया है, तो "git push --all" को काम करना चाहिए।
Ebneter

7

अपनी aliceरिपॉजिटरी (पुश करने से पहले) में यह कोशिश करें :

git config push.default tracking

या, इसे अपने उपयोगकर्ता के लिए डिफ़ॉल्ट के रूप में कॉन्फ़िगर करें git config --global …


git pushoriginरिपॉजिटरी के लिए डिफ़ॉल्ट है (जो आम तौर पर रिपॉजिटरी है जिसमें से आपने वर्तमान रिपॉजिटरी को क्लोन किया है), लेकिन यह वर्तमान ब्रांच को पुश करने के लिए डिफ़ॉल्ट नहीं है - यह केवल उन शाखाओं को पुश करने में चूक करता है जो स्रोत रिपॉजिटरी और डेस्टिनेशन रिपॉजिटरी दोनों में मौजूद हैं।

push.defaultविन्यास चर (देखें Git-config (1) ) नियंत्रण क्या git pushधक्का होगा जब यह नहीं किसी भी "refspec" तर्कों (यानी कुछ भंडार नाम के बाद) दिया जाता है। डिफ़ॉल्ट मान ऊपर वर्णित व्यवहार देता है।

इसके लिए संभावित मूल्य दिए गए हैं push.default:

  • nothing
    यह आपको "refspec" की आपूर्ति करने के लिए मजबूर करता है।

  • matching(डिफ़ॉल्ट)
    यह उन सभी शाखाओं को धक्का देता है जो स्रोत भंडार और गंतव्य भंडार दोनों में मौजूद हैं।
    यह उस शाखा से पूरी तरह से स्वतंत्र है जिसे वर्तमान में चेक आउट किया गया है।

  • upstreamया tracking
    (दोनों मानों का एक ही मतलब है। बाद में "रिमोट-ट्रैकिंग" शाखाओं के साथ भ्रम से बचने के लिए पदावनत कर दिया गया था। पूर्व को 1.7.4.2 में पेश किया गया था, इसलिए आपको बाद में उपयोग करना होगा यदि आप Git 1.7.3.1 का उपयोग कर रहे हैं। )
    ये वर्तमान शाखा को उसके "अपस्ट्रीम" कॉन्फ़िगरेशन द्वारा निर्दिष्ट शाखा में धकेलते हैं।

  • current
    यह वर्तमान शाखा को गंतव्य रिपॉजिटरी में उसी नाम की शाखा में धकेलता है।

    ये अंतिम दो सामान्य मामलों के लिए समान होते हैं (जैसे स्थानीय मास्टर पर काम करना जो मूल / मास्टर को इसके अपस्ट्रीम के रूप में उपयोग करता है ), लेकिन वे अलग होते हैं जब स्थानीय शाखा का अपनी "अपस्ट्रीम" शाखा से अलग नाम होता है:

    git checkout master
    # hack, commit, hack, commit
    
    # bug report comes in, we want a fix on master without the above commits
    
    git checkout -b quickfix origin/master  # "upstream" is master on origin
    # fix, commit
    git push
    

    साथ push.defaultके बराबर upstream(या tracking), पुश करने के लिए जाना होगा originके मास्टर शाखा। जब यह बराबर होता है current, तो पुश origin's क्विकफिक्स शाखा में जाता है।

matchingसेटिंग अपडेट हो जाएगा bareके मास्टर अपने परिदृश्य में एक बार यह स्थापित किया गया है। इसे स्थापित करने के लिए, आप git push origin masterएक बार उपयोग कर सकते हैं ।

हालाँकि, upstreamसेटिंग (या हो सकता है current) ऐसा लगता है कि जो आप होने की उम्मीद करते हैं उसके लिए यह एक बेहतर मैच हो सकता है, इसलिए आप इसे आज़माना चाहते हैं:

# try it once (in Git 1.7.2 and later)
git -c push.default=upstream push

# configure it for only this repository
git config push.default upstream

# configure it for all repositories that do not override it themselves
git config --global push.default upstream

(फिर, यदि आप 1.7.4.2 से पहले अभी भी एक गिट का उपयोग कर रहे हैं, तो आपको trackingइसके बजाय उपयोग करने की आवश्यकता होगी upstream)।


1

मैं SourceTree git क्लाइंट का उपयोग करता हूं , और मैं देखता हूं कि उनकी प्रारंभिक प्रतिबद्ध / पुश कमांड है:

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v --tags --set-upstream origin master:master
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.