2010-10-28 9 views
107

उम्मीद आदमी पृष्ठ से नहीं दिखाया जा सका फिरGit दूरस्थ छँटाई के रूप में कई कम कर दिए हैं शाखाओं के रूप में मैं

git remote prune origin 

हालांकि, केवल एक एक स्थानीय शाखा काटा गया था। इनमें से कुछ शाखाएं मेरे द्वारा बनाई गई थीं, कुछ सहकर्मियों द्वारा। क्या इससे संकेत मिलता है कि मैं उन शाखाओं को पहली जगह सही तरीके से ट्रैक नहीं कर रहा था?

+6

बाहर क्या शाखाओं आप 'कर सकते हैं Git दूरस्थ शो origin' और के लिए किसी भी शाखाओं में चिह्नित देखो हटाया जा करने जा रहे हैं लगता है (टिप्पणियों से उदाहरण & उपयोगी जानकारी के साथ अद्यतन)' stale' –

उत्तर

180

जब आप git push origin :staleStuff का उपयोग करते हैं, तो यह स्वचालित रूप से origin/staleStuff हटा देता है, इसलिए जब आप git remote prune origin चलाते हैं, तो आपने किसी अन्य शाखा को हटा दिया है जिसे किसी अन्य व्यक्ति द्वारा हटा दिया गया था। आपके द्वारा निकाले गए शाखाओं से छुटकारा पाने के लिए अब आपके सहकर्मियों को git prune चलाने की आवश्यकता है।


तो वास्तव में git remote prune क्या करता है? मुख्य विचार: स्थानीय शाखाएं (शाखाओं को ट्रैक नहीं करना) git remote prune कमांड से छुआ नहीं है और मैन्युअल रूप से हटा दिया जाना चाहिए।

अब, बेहतर समझ के लिए एक वास्तविक दुनिया उदाहरण: master और feature:

आप 2 शाखाओं के साथ एक दूरस्थ भंडार है।

  • refs/heads/master (छोटा नाम master)
  • refs/heads/feature: चलो, मान लें कि आप दोनों शाखाओं पर काम कर रहे हैं ताकि एक परिणाम के रूप में आप अपने स्थानीय भंडार में इन संदर्भों है (पूर्ण संदर्भ नाम किसी भी भ्रम से बचने के लिए दिए गए हैं) करते हैं (छोटा नाम feature)
  • refs/remotes/origin/master (छोटा नाम origin/master)
  • refs/remotes/origin/feature (छोटा नाम origin/feature)
,210

अब, एक विशिष्ट परिदृश्य:

  1. कुछ अन्य डेवलपर feature पर सभी काम खत्म, master में विलीन हो जाती है और दूरदराज के भंडार से feature शाखा निकाल देता है।
  2. डिफ़ॉल्ट रूप से, जब आप git fetch (या git pull) करते हैं, तो आपके स्थानीय भंडार से कोई संदर्भ नहीं हटाया जाता है, इसलिए आपके पास अभी भी उन सभी 4 संदर्भ हैं।
  3. आप उन्हें साफ़ करने का निर्णय लेते हैं, और git remote prune origin चलाते हैं।
  4. Git का पता लगाने कि feature शाखा अब मौजूद नहीं है, इसलिए refs/remotes/origin/feature एक बासी शाखा है जो हटाया जाना चाहिए है।
  5. अब आपके पास refs/heads/feature सहित 3 संदर्भ हैं, क्योंकि git remote prune कोई भी refs/heads/* संदर्भ नहीं हटाता है।

branch.<branch_name>.merge कॉन्फ़िगरेशन पैरामीटर द्वारा दूरस्थ ट्रैकिंग शाखाओं से जुड़ी स्थानीय शाखाओं की पहचान करना संभव है। यह पैरामीटर वास्तव में काम करने के लिए आवश्यक नहीं है (शायद git pull को छोड़कर), तो यह गायब हो सकता है।

+0

मैं समझ गया स्थिति होने के लिए: शाखाएं अभी भी स्थानीय रूप से मौजूद हैं लेकिन रिमोट रेपो से हटा दी गई हैं। अब मैं उन सभी स्थानीय शाखाओं को हटाना चाहता हूं जो रिमोट पर मौजूद नहीं हैं, इसलिए मैं गिट प्रुन चलाता हूं। मुझे यही कहते हैं, "ये पुरानी शाखाएं रिमोट रिपोजिटरी से हटा दी गई हैं"। क्या मै गलत हु? – Felixyz

+3

आप सही हैं, लेकिन आपने 'गिट प्रून' के मामले में "स्थानीय शाखाओं" के अर्थ को गलत समझा होगा। केवल '/ refs/remotes/ /' में शाखाएं छंटनी के अधीन हैं; '/ refs/head /' में कोई भी शाखा छुआ नहीं जाएगी - आपको इन्हें मैन्युअल रूप से प्रबंधित करना होगा। – max

+0

आह, यह वास्तव में मैंने सोचा था। तो मैं जो चाहता हूं उसे करने का कोई तरीका नहीं है: उन रिमोट शाखाओं को हटाए जाने पर जांच कर रिमोट शाखाओं को ट्रैक करने वाले सिर में सभी शाखाओं को स्वचालित रूप से हटा दें? – Felixyz

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