2011-09-21 14 views
13

जब मैं अपने गिटोलाइट भंडार पर एक नया रेपो बनाता हूं तो मुझे सर्वर पर कोड को धक्का शुरू करने से पहले मुझे निम्न आदेश दर्ज करना होगा।गिट पुश मूल मास्टर: रेफ/हेड/मास्टर यह क्या करता है

git push origin master:refs/heads/master

यह क्या करता है?

मेरा अनुमान है कि सिर संदर्भ के साथ ऐसा करना निश्चित नहीं है। क्या कोई इसे मुझे समझा सकता है?

उत्तर

27

इस आदेश को तीन भागों नहीं है। यह या तो .git/config में संग्रहीत नामित रिमोट्स में से एक है (आप इन्हें git remote), एक यूआरएल, या टोकन . के साथ सूचीबद्ध कर सकते हैं जिसका मतलब वर्तमान भंडार है।

master:refs/heads/master 

यह एक "refspec" कहा जाता है, और आप git push के लिए आदमी पृष्ठ में इसके बारे में पढ़ सकते हैं। लेकिन आम तौर पर, इसमें दो भागों होते हैं, जो एक कोलन से अलग होते हैं। पहला भाग स्थानीय शाखा का नाम है, और दूसरा भाग दूरस्थ भंडार पर एक शाखा का नाम है (इस मामले में, origin)। यह विशेष रेफस्पेक master:master तक छोटा हो सकता है।

सामान्य रूप से, कोई भी रेफस्पेक्स को और भी छोटा कर सकता है। बस master निर्दिष्ट करें क्योंकि रिफस्पेक रिमोट पर एक ही नाम का उपयोग करने के बराबर है, इसलिए mastermaster:master जैसा ही है।

+0

इस स्पष्टीकरण के लिए धन्यवाद। मैं यहां रेफस्पेक पर गिट दस्तावेज के लिए एक लिंक जोड़ना चाहता हूं: https://git-scm.com/book/en/v2/Git-Internals-The-Refspec और यह भी जोड़ें कि यह एक उपयोगी टूल है रिमोट की शाखा पर एक अलग शाखा, नामस्थान, या यहां तक ​​कि repo धक्का। मुझे जेकिल के साथ प्लगइन का समर्थन करने के लिए संकलन के बाद भौतिक संपत्तियों को भौतिक संपत्तियों को धक्का देने की प्रक्रिया को स्वचालित करने के लिए यह उपयोगी पाया गया है। – prufrofro

1

यह आपके लिए ट्रैकिंग सेट अप करता है। आप इस के लिए आशुलिपि का उपयोग कर सकते हैं:

git push origin master 

कोलन के बाद भाग दूरस्थ रेपो पर शाखा का नाम है। यदि आप इसे छोड़ देते हैं, तो गिट मानता है कि आप वही नाम चाहते हैं।

उम्मीद है कि इससे मदद मिलती है।

2

git push का डिफ़ॉल्ट व्यवहार, जो संभवतया आप "सर्वर को धक्का कोड" के रूप में वर्णित करते हैं, केवल उन स्थानीय शाखाओं को धक्का देना है जिनके नाम पर एक मेल खाने वाली शाखा है, जो रिमोट पर आप धक्का दे रहे हैं। जब आप एक नया रेपो बनाते हैं, इसमें इसकी कोई शाखा नहीं होती है, इसलिए एक साधारण git push कुछ भी नहीं दबाएगा। आपको पहले शाखा द्वारा स्पष्ट रूप से शाखा को धक्का देना होगा। उसके बाद, डिफ़ॉल्ट व्यवहार काम करेगा जैसा कि आप उम्मीद करते हैं।

पीएस असल में, आपको केवल git push origin master होना है। यह आपके स्थानीय मास्टर को गिटोलाइट रेपो को मास्टर के रूप में धक्का देता है, क्योंकि आपने एक अलग नाम निर्दिष्ट नहीं किया है। यदि आपने git push origin master:foo कहा है, तो जिस शाखा को आप स्थानीय रूप से "मास्टर" कहते हैं, उसे गिटोलाइट पर "foo" के रूप में जाना जाएगा।

पी.पी.एस. आप "कुछ भी नहीं", "मिलान" (डिफ़ॉल्ट), "ट्रैकिंग"/"अपस्ट्रीम" और "वर्तमान" के बीच डिफ़ॉल्ट पुश व्यवहार स्विच कर सकते हैं। git-config man page पर "push.default" के लिए सेटिंग्स देखें।

git push 

यह धक्का आदेश का आह्वान

origin 

यह नाम दूरस्थ जिस पर आप दे रहे हैं:

4

master:refs/heads/master एक रेफस्पेक है।

refspecs रूप +<src>:<dst>

के हैं तो यहाँ गुरु अपने स्थानीय रेपो पर रेफरी है कि आप रिमोट (मूल) पर refs/heads/master refspec को धक्का कर रहे हैं। master वास्तव में refs/heads/master के लिए छोटा है।

वास्तव में, आप केवल git push origin master कर सकते हैं जिससे यह आपके स्थानीय पर मास्टर को दूरस्थ पर मास्टर को धक्का देगी। केवल तभी जब आप एक अलग रेफरी पर धक्का देना चाहते हैं तो आपको गंतव्य रेफरी को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है।

इसके अलावा बस git push में डिफ़ॉल्ट व्यवहार भी है, जो शायद पहले पुश करने से पहले और रिमोट पर एक शाखा (मास्टर) बनाने से पहले मामला नहीं होता। तो ऐसा लगता है कि आपको जिस आदेश का उल्लेख किया गया है उसे करने की आवश्यकता है। मैनुअल

संबंधित मुद्दे