दूरस्थ दूरस्थ prune - मैं उम्मीद के रूप में कई pruned शाखाओं के रूप में नहीं दिखा था


113

मैन पेज से:

Deletes all stale tracking branches under <name>.
These stale branches have already been removed from the remote repository
referenced by <name>, but are still locally available in "remotes/<name>".

इसलिए मैंने उपयोग करते हुए शाखाओं का एक गुच्छा हटा दिया

git push origin :staleStuff

और फिर भाग गया

git remote prune origin

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


7
यह जानने के लिए कि आप कौन-सी शाखाएँ हटाने जा रहे हैं, आप क्या कर सकते हैं git remote show originऔर किसी भी शाखा को देख सकते हैंstale
कोई व्यक्ति

जवाबों:


189

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


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

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

आपके पास 2 शाखाओं के साथ एक दूरस्थ भंडार है: masterऔर feature। मान लें कि आप दोनों शाखाओं पर काम कर रहे हैं, इसलिए परिणामस्वरूप आपके स्थानीय रिपॉजिटरी में ये संदर्भ हैं (किसी भी भ्रम से बचने के लिए पूर्ण संदर्भ नाम दिए गए हैं):

  • refs/heads/master(संक्षिप्त नाम master)
  • refs/heads/feature(संक्षिप्त नाम feature)
  • refs/remotes/origin/master(संक्षिप्त नाम origin/master)
  • refs/remotes/origin/feature(संक्षिप्त नाम origin/feature)

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

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

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

(टिप्पणी से उदाहरण और उपयोगी जानकारी के साथ अद्यतन)


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

3
आप सही हैं, लेकिन आप के मामले में "स्थानीय शाखाओं" का अर्थ गलत समझा जा सकता है git prune। केवल शाखाएँ /refs/remotes/<remote_name>/प्रूनिंग के अधीन हैं; किसी भी शाखा /refs/heads/को नहीं छुआ जाएगा - आपको इन्हें मैन्युअल रूप से प्रबंधित करना होगा।
अधिकतम

अहा, वास्तव में यही मैंने सोचा था। इसलिए मेरे पास वह तरीका नहीं है जो मैं चाहता हूं: स्वचालित रूप से उन शाखाओं को हटा दें जो दूरस्थ शाखाओं को ट्रैक कर रही हैं, यह जांच कर कि क्या उन दूरस्थ शाखाओं को हटा दिया गया है?
फेलिक्सज

2
उसके लिए कोई अंतर्निहित कमांड नहीं है, लेकिन आप स्वयं ऐसी स्क्रिप्ट लिख सकते हैं। ट्रैकिंग branch.<branch_name>.mergeपैरामीटर को कॉन्फ़िगर पैरामीटर की उपस्थिति से पहचाना जा सकता है ।
अधिकतम

यह उत्तर बेहतर होगा यदि आप टिप्पणियों में जानकारी को स्वयं उत्तर में जोड़ते हैं ताकि हर कोई जो यहां आए और @ गलतफहमी के रूप में एक ही गलतफहमी हो, को आपके उत्तर को मजाकिया रूप में नहीं देखना पड़ता है और फिर अंत में समझ हासिल करने के लिए टिप्पणियों को पढ़ें। ।
आक्रिकोस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.