कैसे सूचीबद्ध करें मैं देखना चाहता हूं कि मेरे पास कौन से टैग स्थानीय हैं जो किसी विशेष रिमोट पर उपलब्ध नहीं हैं। मैं यह कैसे कर सकता हूँ? मुझे पता है कि मैं उन सभी को धक्का देने के लिए git push --tags
कर सकता हूं। हालांकि, अगर ऐसे कुछ टैग हैं जिन्हें मैं धक्का नहीं चाहता हूं, तो मैं कैसे सुनिश्चित कर सकता हूं कि मैंने कुछ याद नहीं किया है?अप्रशिक्षित गिट टैग
17
A
उत्तर
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
यह क्या परिवर्तन होगा धक्का दे दिया गया है, लेकिन वास्तव में ये परिवर्तन नहीं होगा दिखाएगा।
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)\""
चूंकि आप 'शो-रेफ' से फ़िल्टर करने के लिए 'गीट एलएस-रिमोट' के आउटपुट का उपयोग कर रहे हैं, इसलिए '^ {}' लाइनों को छोड़ने में बहुत अधिक नुकसान नहीं होता है। इससे हमें थोड़ा सा छोड़ देता है सरल: 'गिट शो-रेफ - टैग्स | grep -v -F "$ (git ls-remote --tags origin | cut -f 2)" ' – phinze
'मूल' के साथ प्रतिस्थापित '' को छोड़कर यह वही सटीक आदेश है। कॉपी/पेस्ट करने के लिए इसका इस्तेमाल करें: 'git show-ref -tags | grep -v -F "$ (git ls-remote --tags मूल | grep -v '\^{}' | cut -f 2)" ' –
funroll