2012-11-14 15 views
9

एक और मुद्दा ओर से प्राप्ति:Git 1.8: यह त्रुटि धक्का: DST रेफरी refs/सिर/मास्टर Git 1.8 के साथ एक से अधिक स्रोत

$ git push 
error: dst ref refs/heads/master receives from more than one src. 
error: failed to push some refs to '[email protected]:xxx.git' 

सुझाव? यह 1.8 के उन्नयन से पहले काम कर रहा था।

$ git push origin :refs/heads/refs/heads/master 
remote: warning: Allowing deletion of corrupt ref. 
To [email protected]:xxx.git 
- [deleted]   refs/heads/master 

कोई विचार क्या है और क्यों यह भ्रष्ट था:

$ git remote -v 
origin [email protected]:xxx.git (fetch) 
origin [email protected]:xxx.git (push) 

आसपास googling के बाद मुझे यह पहली कोशिश की।

$ git pull 
Already up-to-date. 

$ git push 
error: dst ref refs/heads/master receives from more than one src. 
error: failed to push some refs to '[email protected]:xxx.git' 

फिर भी काम नहीं कर रहा है, लेकिन origin master काम किया है कम से कम:

$ git push origin master 
Counting objects: 42, done. 
To [email protected]:xxx.git 
3e3fc87..6e11d2a master -> master 

ठीक है, यह तय लेकिन समस्या के कारण के साथ शुरू क्या था उस तरह का? क्यों मूल/मास्टर अचानक दूषित हो गया? मैंने git push origin :refs/heads/refs/heads/master के साथ क्या किया?

.git/config:

[core] 
repositoryformatversion = 0 
filemode = false 
bare = false 
logallrefupdates = true 
ignorecase = true 
precomposeunicode = false 
[remote "origin"] 
fetch = +refs/heads/*:refs/remotes/origin/* 
url = [email protected]:xx.git 
push = HEAD 
[branch "master"] 
remote = origin 
merge = refs/heads/master 

ls .git/refs/remotes/origin: 

HEAD master refs 

अंत में, अब मैं git push origin master हर बार क्या करना है। और सबसे कष्टप्रद यह है कि कुछ रिपोज़ git push के साथ काम करते हैं, लेकिन उनमें से अधिकतर में मुझे origin master जोड़ना है, लेकिन मुझे समझ में नहीं आता कि क्यों, और यह नहीं हो सकता कि मैं अकेला हूं।

+0

क्या आप अपने '.git/config' सेक्शन' [रिमोट "मूल"] 'और' [शाखा "मास्टर" की सामग्री दिखा सकते हैं] '? इसके अलावा, 'एलएस।Git/refs/रिमोट/origin'। –

+0

यहां आप जाते हैं, लेकिन इसके बाद मैंने इसे 'निश्चित' किया है – firedev

+0

मुझे एक ही समस्या है, सिवाय इसके कि मुझे कभी भी refs/head/refs/head/कहीं भी नहीं था (दोनों .git/और सर्वर पक्षों में देखा गया था)। मेरे पास यह सुझाव दिया गया है कि वैश्विक कॉन्फ़िगरेशन में यह है: push.default = मिलान remote.origin.push = HEAD – mirabilos

उत्तर

0

क्या this git old patch से समझाया गया है के बाद (2007!)

Some refs go stale, e.g. when the forkee rebased and lost some objects needed by the fork.
The quick & dirty way to deal with those refs is to delete them and push them again.

However, git-push first would first fetch the current commit name for the ref, would receive a null sha1 since the ref does not point to a valid object, then tell receive-pack that it should delete the ref with this commit name.
delete_ref() would be subsequently be called, and check that resolve_ref() (which does not check for validity of the object) returns the same commit name. Which would fail.

refs/heads/refs/heads/master कुछ भी नहीं करने के लिए एक शाखा को अनुचित तरीके से नाम "refs/सिर/मास्टर" (defining hierachical branch name के लिए नामस्थान का उपयोग कर), और अंक की तरह दिखता है।
इसे हटाने का सही कदम था।

+0

मुझे समझ में नहीं आता - मुझे शायद कुछ शाखाएं थीं लेकिन मैं बस अपने स्वयं के भंडार के लिए प्रतिबद्ध हूं, काम कर रहा हूं परियोजना पर अकेले। क्या यह किसी प्रकार का 1.8 संक्रमण बग है? – firedev

+0

@ निक नहीं, मुझे लगता है कि रिमोट रेपो के भीतर यह एक गलत स्थिति थी, जिसे आपने खींचा था, और जिसने गलत शाखा नाम 'refs/head/master'' पेश किया था। इसलिए अगले धक्का पर मुद्दा। – VonC

+0

कुछ दिनों बाद मैंने कुछ बदलाव किए, और मैं फिर से धक्का नहीं दे सकता। – firedev

1

ऐसा लगता है कि आपके refs पेड़ की एक अतिरिक्त प्रति refs/remotes/origin के भीतर है। ध्यान दें कि refs/remotes/origin के भीतर, आपके पास अतिरिक्त refs निर्देशिका है? मुझे नहीं पता कि यह कैसे मिला, लेकिन शायद यह आपकी समस्याओं का कारण बन रहा है। गिट रीफ्स के संक्षेपों को संभालता है (आपको origin/master जैसे प्रत्यय का उपयोग करके उपसर्ग छोड़ने की इजाजत देता है), शायद यह refs/remotes/origin/master और refs/remotes/refs/remotes/origin/master दोनों को भ्रमित कर रहा है।

मुझे नहीं पता कि यह इस राज्य में कैसे पहुंचा; संभवतः एक गिट उपकरण में एक बग, संभवतः एक टाइपो जिसे आपने किसी बिंदु पर बनाया था। आपने इस डुप्लिकेट शाखा को ट्रैक करने वाली दूरस्थ शाखा को हटाकर समस्या का आधा तय किया है। मैं शर्त लगा सकता हूं कि आप समस्या के दूसरे भाग को ठीक कर सकते हैं, और git push फिर से करने में सक्षम होंगे, अगर आप refs/remotes/origin/refs निर्देशिका हटाते हैं।

+0

अब मैंने कुछ बदलाव किए हैं और मुझे एक ही समस्या है। – firedev

+0

@Nick आपने क्या परिवर्तन किए? क्या आपने उल्लेख किया है कि आपने '.git/refs/remotes/origin/refs' को हटा दिया है? याद रखें कि आपको उस पर 'rm -r' करना होगा, क्योंकि यह एक निर्देशिका है और आप इसकी सभी उपनिर्देशिकाएं हटाना चाहते हैं। –

+0

मेरा मतलब है कि मैंने कुछ कोड बदल दिया है और धक्का देना चाहता था। यहां तक ​​कि 'आरएम-आर' भी मदद नहीं कर रहा है, लेकिन मैं गिट 'पुश मूल मास्टर' के साथ धक्का दे सकता हूं: '$ rm -r .git/refs/remotes/origin/refs/ $ गिट पुश त्रुटि: dst ref ref/head/मास्टर एक से अधिक स्रोत से प्राप्त करता है। त्रुटि: कुछ [email protected]: xx.git'' पर कुछ रेफरी को धक्का देने में विफल – firedev

9

एक और तरीका यह त्रुटि मिलना अगर आप गलती से अर्थात शाखा आप दो बार पुश करने के लिए कोशिश कर रहे हैं का नाम लिखें, .:

git push master otherBranch master moreBranches 

इस त्रुटि पैदावार है। फिक्स स्पष्ट है जब आप जानते हैं कि आपने इसे किया है:

git push master otherBranch moreBranches 
संबंधित मुद्दे