दिलचस्प पोस्ट
क्या स्टिडिन को टाइमस्टैम्प को प्रीपेड करने के लिए यूनिक्स सुविधा है? एकाधिक समूह द्वारा कई कार्यों को कॉलम के अनुसार लागू करें मुझे अपने JSON एजेक्स रिटर्न प्रकार के लिए आवश्यक एस्केप वर्णों की एक सूची कहां मिल सकती है? PHP यादृच्छिक स्ट्रिंग जनरेटर जावास्क्रिप्ट में एक regex match () की स्थिति वापस आती है? MySQL में दो तिथियों के बीच अंतर तर्कों की संख्या पर मैक्रो ओवरलोडिंग सीएलआर 4.0 में एकल ऑब्जेक्ट अभी भी 2 जीबी तक सीमित हैं? कैसे + = (प्लस समान) काम करता है? क्या एक ORM का उपयोग करने के लिए अच्छे कारण हैं? Mysql / फजी खोज के लिए लेवेन्सशेटिन दूरी का कार्यान्वयन? पकड़ के साथ एक कोशिश ब्लॉक के अंदर रिटर्न क्यों नहीं लौटा सकता? रेडियो बटन और एक ही लाइन में प्रदर्शित करने के लिए लेबल सी / सी ++: गैर-पूर्णांक के लिए स्विच पृष्ठभूमि कार्यकर्ता को तर्क भेजना?

पुराने रिमोट जीआईटी की शाखाओं को साफ करना

यहां मेरा जीआईटी वर्कफ़्लो है

मैं दो अलग-अलग कंप्यूटरों (ए और बी) से काम करता हूं और ड्रॉपबॉक्स डायरेक्टरी में आम जीआईटी रिमोट को संग्रहित करता हूं।

मान लें कि मेरे पास दो शाखाएं हैं और विकास दोनों अपने दूरस्थ समकक्ष मूल / मास्टर और उत्पत्ति / विकास पर नज़र रखते हैं।

अब जब कंप्यूटर ए पर, मैं शाखा के विकास को हटा देता हूं – दोनों स्थानीय और दूरस्थ – निम्न प्रकार हैं:

git push origin :heads/devel git branch -d devel 

अब अगर मैं कंप्यूटर ए पर git branch -a करता हूं, तो मुझे मिलती है

 master origin/HEAD origin/master 

अब मैं कंप्यूटर बी। git fetch जाता हूं। मैं स्थानीय डेवल शाखा को यहां से हटा सकता हूं

 git branch -d devel 

लेकिन मैं दूरस्थ डेवल शाखा को नहीं निकाल सकता

 git push origin :heads/devel error: unable to push to unqualified destination: heads/proxy3d The destination refspec neither matches an existing ref on the remote nor begins with refs/, and we are unable to guess a prefix based on the source ref. fatal: The remote end hung up unexpectedly 

git branch -a करना git branch -a अभी भी दूरदराज के शाखाओं में मूल / विकास की सूची देता है

मैं मशीन बी से दूरस्थ पहुंच को कैसे साफ़ कर सकता हूं?

वेब के समाधान से एकत्रित समाधान "पुराने रिमोट जीआईटी की शाखाओं को साफ करना"

सबसे पहले, मशीन बी पर git branch -a का क्या परिणाम है?

दूसरा, आपने पहले ही heads/devel को origin से हटा दिया है, इसलिए आप इसे मशीन बी से नहीं हटा सकते।

प्रयत्न

 git branch -r -d origin/devel 

या

 git remote prune origin 

या

 git fetch origin --prune 

और अपने git बयान के अंत में --dry-run को जोड़ने के लिए बेझिझक महसूस करें, इसे वास्तव में चलने के बिना चलने का नतीजा देखने के लिए।

चलाने के लिए विचार करें:

 git fetch --prune 

प्रत्येक शाखा में एक नियमित आधार पर स्थानीय शाखाएं निकालने के लिए जो एक दूरस्थ शाखा को हटा दिया गया है (जो अब दूरस्थ जीआईटी रेपो में मौजूद नहीं है) को ट्रैक कर रहे हैं।

इससे आगे और सरल हो सकता है

 git config remote.origin.prune true 

यह एक per-repo सेटिंग है जो कि भविष्य के किसी भी git fetch or git pull को स्वचालित रूप से छुटकारा पाने के लिए git fetch or git pull

या आप वैश्विक .gitconfig को भी संपादित कर सकते हैं और जोड़ सकते हैं

 [fetch] prune = true 

अपने सभी जीआईटी रिपॉजिटरी के लिए एक सेटिंग बनाने के लिए

यहाँ बाश स्क्रिप्ट है जो आपके लिए यह कर सकती है। यह http://snippets.freerobby.com/post/491644841/remove-magged-branches-in-git स्क्रिप्ट के संस्करण को संशोधित किया गया है। मेरा संशोधन विभिन्न दूरस्थ स्थानों का समर्थन करने में सक्षम बनाता है

 #!/bin/bash current_branch=$(git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/\1/') if [ "$current_branch" != "master" ]; then echo "WARNING: You are on branch $current_branch, NOT master." fi echo -e "Fetching merged branches...\n" git remote update --prune remote_branches=$(git branch -r --merged | grep -v '/master$' | grep -v "/$current_branch$") local_branches=$(git branch --merged | grep -v 'master$' | grep -v "$current_branch$") if [ -z "$remote_branches" ] && [ -z "$local_branches" ]; then echo "No existing branches have been merged into $current_branch." else echo "This will remove the following branches:" if [ -n "$remote_branches" ]; then echo "$remote_branches" fi if [ -n "$local_branches" ]; then echo "$local_branches" fi read -p "Continue? (y/n): " -n 1 choice echo if [ "$choice" == "y" ] || [ "$choice" == "Y" ]; then remotes=`echo "$remote_branches" | sed 's/\(.*\)\/\(.*\)/\1/g' | sort -u` # Remove remote branches for remote in $remotes do branches=`echo "$remote_branches" | grep "$remote/" | sed 's/\(.*\)\/\(.*\)/:\2 /g' | tr -d '\n'` git push $remote $branches done # Remove local branches git branch -d `git branch --merged | grep -v 'master$' | grep -v "$current_branch$" | sed 's/origin\///g' | tr -d '\n'` else echo "No branches removed." fi fi 

यह कमांड "ड्राई रन" होगा, master अलावा सभी रिमोट ( origin ) मर्ज किए गए शाखाओं को हटा देगा। आप इसे बदल सकते हैं या मास्टर के बाद अतिरिक्त शाखाएं जोड़ सकते हैं: grep -v for-example-your-branch-here |

 git branch -r --merged |  grep origin |  grep -v '>' |  grep -v master |  xargs -L1 |  awk '{sub(/origin\//,"");print}'|  xargs git push origin --delete --dry-run 

अगर यह अच्छा लगता है, तो – --dry-run हटा दें इसके अतिरिक्त, आप इसे पहले एक कांटा पर परीक्षण कर सकते हैं

SourceTree (v2.3.1) के साथ यह कैसे करें:
1. प्राप्त करें पर क्लिक करें
2. "शाखाओं काट देना शाखाओं की जांच करें …"
3. ओके दबाएं
4. 😀

यहां छवि विवरण दर्ज करें

 git push --all --prune --dry-run 

यह आपके स्थानीय रेपो पर दूरदराज के रेपो से सभी शाखाओं को निकाल देगा। अगर आप जो देखते हैं, उसे पसंद करते हैं, तो फिर बिना किसी भी --dry-run

टिप्पणियों के जवाब में: स्वाभाविक रूप से, विलोपन का कार्य खतरनाक है, इसलिए --dry-run और man git push पढ़ने के लिए स्वतंत्र महसूस करें।

यदि git branch -r बहुत दूरदराज के ट्रैकिंग शाखाओं को दिखाता है जिसे आप में रूचि नहीं है और आप उन्हें स्थानीय से ही निकालना चाहते हैं, तो निम्न कमांड का प्रयोग करें:

 git branch -r | grep -Ev 'HEAD|master|develop' | xargs -r git branch -rd 

एक सुरक्षित संस्करण केवल विलय वाले लोगों को निकालना होगा:

 git branch -r --merged | grep -Ev 'HEAD|master|develop' | xargs -r git branch -rd 

यह बड़े प्रोजेक्ट्स के लिए उपयोगी हो सकता है, जहां आपको अन्य टीम की सुविधाओं की शाखाओं की ज़रूरत नहीं है, लेकिन प्रारंभिक क्लोन पर कई रिमोट-ट्रैकिंग शाखाएं प्राप्त हुई हैं।

और यह कदम अकेला अधूरा है क्योंकि उन नष्ट किए गए दूरस्थ-ट्रैकिंग शाखाएं अगले git fetch पर फिर से दिखाई देंगे।

उन दूरस्थ-ट्रैकिंग शाखाओं को लेना बंद करने के लिए आपको स्पष्ट रूप से .git / config में लाने के लिए refs निर्दिष्ट करने की आवश्यकता है:

 [remote "origin"] # fetch = +refs/heads/*:refs/remotes/origin/* fetch = +refs/heads/master:refs/remotes/origin/master fetch = +refs/heads/develop:refs/remotes/origin/develop 

उपर्युक्त उदाहरण में हम केवल master लाने और शाखाएं develop हैं, स्वतंत्र महसूस करते हैं और अपना जोड़ते हैं।