2012-07-03 13 views
17

कैसे सूचीबद्ध करें मैं देखना चाहता हूं कि मेरे पास कौन से टैग स्थानीय हैं जो किसी विशेष रिमोट पर उपलब्ध नहीं हैं। मैं यह कैसे कर सकता हूँ? मुझे पता है कि मैं उन सभी को धक्का देने के लिए git push --tags कर सकता हूं। हालांकि, अगर ऐसे कुछ टैग हैं जिन्हें मैं धक्का नहीं चाहता हूं, तो मैं कैसे सुनिश्चित कर सकता हूं कि मैंने कुछ याद नहीं किया है?अप्रशिक्षित गिट टैग

उत्तर

22

आप टैग कि स्थानीय स्तर पर नहीं बल्कि दूरदराज निर्दिष्ट में मौजूद देखने के लिए निम्न का उपयोग कर सकते हैं:

git show-ref --tags | grep -v -F "$(git ls-remote --tags <remote name> | grep -v '\^{}' | cut -f 2)" 

ध्यान दें कि git ls-remote शो दोनों एनोटेट टैग और यह ^{} साथ के लिए अंक के लिए प्रतिबद्ध है, तो हम की जरूरत है डुप्लिकेट को हटाने के लिए।

एक वैकल्पिक git push को --dry-run/-n झंडे का उपयोग करना है:

git push --tags --dry-run 

यह क्या परिवर्तन होगा धक्का दे दिया गया है, लेकिन वास्तव में ये परिवर्तन नहीं होगा दिखाएगा।

+1

चूंकि आप 'शो-रेफ' से फ़िल्टर करने के लिए 'गीट एलएस-रिमोट' के आउटपुट का उपयोग कर रहे हैं, इसलिए '^ {}' लाइनों को छोड़ने में बहुत अधिक नुकसान नहीं होता है। इससे हमें थोड़ा सा छोड़ देता है सरल: 'गिट शो-रेफ - टैग्स | grep -v -F "$ (git ls-remote --tags origin | cut -f 2)" ' – phinze

+1

'मूल' के साथ प्रतिस्थापित '' को छोड़कर यह वही सटीक आदेश है। कॉपी/पेस्ट करने के लिए इसका इस्तेमाल करें: 'git show-ref -tags | grep -v -F "$ (git ls-remote --tags मूल | grep -v '\^{}' | cut -f 2)" ' – funroll

2

रिकॉर्ड के लिए, मैं 'कॉम' कमांड के साथ इस का एक संस्करण का उपयोग कर रहा:

comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2) 

मैं .gitconfig में एक Git उपनाम के रूप में यह उपयोग कर रहा हूँ, उचित बैश इस तरह के हवाले से:

[alias] 
    unpushed-tags = "!bash -c \"comm -23 <(git show-ref --tags | cut -d ' ' -f 2) <(git ls-remote --tags origin | cut -f 2)\"" 
संबंधित मुद्दे