2016-10-20 6 views
9

ट्रैकिंग के रूप में नहीं दिखाता है मेरे पास एक गिट रेपो है। यदि मैं स्थानीय शाखा बनाता हूं, तो सामान करता हूं और फिर शाखा को सर्वर पर धक्का देता हूं, git branch -vv कर इसे ट्रैकिंग के रूप में नहीं दिखाता है।जब मैं सर्वर पर एक स्थानीय शाखा को धक्का देता हूं तो यह

यदि फिर भी मैं रेपो नीचे ताजा खींच, यह git branch -vv

साथ मैं भी सफलता नहीं मिली निम्नलिखित की कोशिश की है दिखाता है।

git config --get branch.foobranch.remote 

git config --get branch.foobranch.merge 

अगर मैं उस शाखा का उपयोग करने के, कई धक्का कर रही जारी रखने के लिए और सर्वर से खींचती है, सब कुछ तो मैं केवल यह मान सकते हैं कि Git जानता है कि शाखा किसी भी तरह रिमोट ट्रैक कर रहा है काम करता है। मैं जानना चाहता हूं कि मैं इस जानकारी तक कैसे पहुंच सकता हूं।

उत्तर

6

लेकिन क्या ट्रैकिंग जानकारी वहां से शुरू नहीं हुई है?

नहीं: जब आप एक नई शाखा स्थानीय रूप से बनाने के लिए, Git मान नहीं होंगे जहां (जो दूरस्थ रेपो के लिए) आप इसे पुश करने के लिए चाहते हैं।

अधिक विशेष रूप से, एक सरल git push (-u के बिना) स्थानीय config branch.<name>.remote और branch.<name>.merge, जो जब एक स्थानीय शाखा एक नदी के ऊपर यह करने के लिए जुड़े शाखा स्थापित कर रहे हैं सेट नहीं करेगा।

पहली बार जब आप उस शाखा को दबाएंगे तो आपको अपस्ट्रीम रेपो निर्दिष्ट करना होगा।

यह एक git clone (man page) से अलग है:

क्लोन एक नव निर्मित निर्देशिका में भंडार है, क्लोन भंडार में प्रत्येक शाखा (git branch -r का उपयोग कर योग्य) के लिए रिमोट ट्रैकिंग शाखाओं बनाता है, और बनाता है और एक प्रारंभिक बाहर की जाँच करता है शाखा जो क्लोन रिपोजिटरी की वर्तमान सक्रिय शाखा से फंसे हुए हैं।

एक रिमोट ट्रैकिंग शाखा के बाद से अस्तित्व में के लिए, (उदाहरण के लिए) origin/master जब git clone चेकआउट master करता है, ने कहा कि master स्वतः अपनी नदी के ऊपर शाखा origin/master साथ संबद्ध किया जाएगा।
देखें git checkout

तो <branch> नहीं मिला है लेकिन वहाँ

$ git checkout -b <branch> --track <remote>/<branch> 

लिए वास्तव में एक दूरदराज के एक मेल खाने वाले नाम (यह <remote> कहते हैं), इलाज के रूप में बराबर में एक ट्रैकिंग शाखा मौजूद नहीं है यही कारण है कि यही कारण है कि आप सीधे क्लोन के बाद master से धक्का दे सकते हैं, लेकिन आप एक नई शाखा बनाने के बाद सीधे धक्का नहीं दे सकते (जिसके लिए origin/newBranch आपके स्थानीय रेपो में पहले से मौजूद रिमोट ट्रैकिंग शाखा नहीं है)

वह चेकआउट (स्वचालित रूप से मौजूदा रिमोट ट्रैकिंग शाखा origin/<branch> पर ट्रैकिंग) स्थानीय कॉन्फ़िगरेशन branch.<name>.remote और branch.<name>.merge सेट करेगा।

$ git branch --set-upstream-to=origin/feature/xyz 

तो आप विकल्प (-u -u पुश करने के लिए की जरूरत है -:

+0

यदि आप मौजूद नहीं हैं तो आप स्थानीय शाखा को मूल/न्यूब्रैंच में धक्का दे सकते हैं। प्रारंभिक धक्का शाखा बनाता है (मुझे लगता है कि यह सर्वर का एक विशिष्ट कार्यान्वयन है)। किसी भी बाद के पुल या पुश को "रिमोट" का उपयोग डिफ़ॉल्ट रूप से किया जाता है। मैं इसे "--track" –

+0

@VincePanuccio No का उपयोग किये बिना हर समय करता हूं, एक नई शाखा को दबाकर स्वचालित रूप से इसे ट्रैक नहीं किया जाएगा। लेकिन एक रेपो क्लोनिंग, एक ही शाखा का चेकआउट करना, जैसा कि मैंने जवाब में उल्लेख किया है। – VonC

+0

जब मैं एक स्थानीय शाखा बनाता हूं, तो मैं धक्का देता हूं और इसे बनाया जाता है और फिर मैं ट्रैकिंग जानकारी दर्ज किए बिना इसे धक्का और खींच सकता हूं। हो सकता है कि आप इसे जिस तरह से सोच रहे हों उस पर नज़र डालें, लेकिन स्पष्ट रूप से वहां कुछ प्रकार का लिंक है। अगर कोई रिमोट शाखा में बदलाव करता है तो मैं बिना किसी ट्रैकिंग जानकारी के इसे नीचे खींच सकता हूं। –

4

ऐसा इसलिए है क्योंकि गिट अलग-अलग कार्यों को पसंद करते हैं।

एक शाखा धकेल एक शाखा के नदी के ऊपर एक और कार्रवाई की स्थापना कर रहा है एक कार्रवाई
$ git push origin feature/more_memory

है
$ git branch --set-upstream-to=origin/feature/more_memory

लेकिन Git हमेशा में, कुछ आदेश है कि आप अक्सर संयोजित करना चाहते हैं एक साथ प्रदर्शन करने के लिए उपनाम प्रदान करता है आपके मामला, एक नई शाखा को दबाते समय, उपयोग करें:
$ git push -u origin feature/more_memory

यह शाखा को धक्का देगा और ट्रैकिंग जानकारी सेट अप करें (-u)।

+0

लेकिन क्या उस ट्रैकिंग जानकारी को शुरू करने के लिए नहीं है? मैं उस शाखा से धक्का दे सकता हूं और स्पष्ट रूप से ट्रैकिंग जानकारी सेट किए बिना खींच सकता हूं- –

2

इसका कारण यह है कि आप द्वारा दूरस्थ (गुप्त कोष) में भी बनाने के लिए (है) नदी के ऊपर

यह किया जा सकता है की जरूरत है पहली बार के लिए किया जाना चाहिए, बाद में एक बार नदी के ऊपर शाखा ट्रैक किया जाता है यू कि शाखा के लिए -u विकल्प)

$ git push -u origin feature/xyz 
1

बस मेरे 2 सेंट बिना धक्का कर सकते हैं: प्राप्त कर सकते हैं कष्टप्रद फिर से टाइपिंग एक शाखा का नाम जब आप करना चाहते हैं इसे रीमो करने के लिए धक्का ते। आखिरकार आप इसे बनाने के लिए पहले ही टाइप कर चुके हैं! HEAD का उपयोग करना हल करता है। यहाँ एक उदाहरण है:

$ git push -u origin HEAD

इस दूरदराज के लिए अपने वर्तमान स्थानीय शाखा धक्का और यह ट्रैक करेगा। इसके बाद, $ git push का उपयोग ठीक काम करेगा।

+0

रिमोट को ट्रैक करने की कोई आवश्यकता नहीं है, वैसे भी ऐसा होता है। वह मेरे प्रश्न का मुद्दा था। अगर मेरे पास स्थानीय शाखा है और 'गिट पुश मूल ब्रानchnम' है तो उस शाखा से उस बिंदु से बिना किसी मुद्दे के काम पर धक्का और खींचना। समस्या यह है कि ट्रैकिंग जानकारी गुम है, लेकिन यह अभी भी काम करता है :) –

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