2012-01-12 20 views
12

मैं निम्नलिखित 1-लाइनर है कि मैं देखने के लिए कोड का एक टुकड़ा के साथ मदद के लिए एक अच्छे उम्मीदवार हो सकता है, जो उपयोग करते हैं:गिट उपनाम के रूप में चल रहे कमांड का परिणाम अलग-अलग परिणाम क्यों देता है?

git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr 

जो प्रतिबद्ध के क्रम में लेखकों को सूचीबद्ध करता है, यह कच्चे तेल की है, लेकिन यह ठीक काम करता है।

जब मैं फिर भी मेरी Git config में जोड़ने, इस तरह:

[alias] 
    guru=!git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr 

git guru 

चल कमांड लाइन से चलाने के लिए अलग-अलग परिणाम देता है।

[email protected](rp):~/git/apps$ git log --pretty=short . | grep ^Auth | sort | uniq -c | sort -nr 
710 Author: dave <[email protected]> 
415 Author: pete <[email protected]> 
402 Author: craig <[email protected]> 

की तुलना में:

[email protected](rp):~/git/apps$ git guru 
859 Author: craig <[email protected]> 
813 Author: paul <[email protected]> 
798 Author: dave <[email protected]> 

स्टीफन Nawe नीचे नोटों के रूप में, उपनाम आपके भंडार की जड़ में चलाने के लिए, वहाँ निर्देशिका मैं तैयार हूं पर कमांड चलाएँ, या निर्दिष्ट करने के लिए किसी भी तरह से है ? एक शेल कमांड (अर्थात ! लगाया जाता है) कार्यशील निर्देशिका (जहां .git जीवन) की उच्चस्तरीय में चलाने का उपयोग कर

+1

में जोड़ना ऐसा लगता है कि जिस तरह से चाहते हैं 'Git shortlog -sn'। – patthoyts

+0

@patthoyts, इसे एक उत्तर के रूप में जोड़ें और इसे टिक मिलेगा! –

उत्तर

4

आप जो कर रहे हैं उसे देखते हुए शायद आप git shortlog -sn का उपयोग करना चाहते हैं क्योंकि यह कार्य पहले ही प्रश्न में है।

गिट एलियास सभी को अपरिवर्तित नहीं चलते हैं। जैसा कि git config manual में वर्णित है "ध्यान दें कि शेल कमांड को रिपोजिटरी की शीर्ष-स्तरीय निर्देशिका से निष्पादित किया जाएगा, जो वर्तमान निर्देशिका नहीं हो सकता है।" तो केवल शैल कमांड शीर्ष स्तर पर चलते हैं। यदि आप बस एक गिट उपसमूह उपनाम करते हैं तो यह वर्तमान स्थान पर चलाएगा। निम्नलिखित सत्र लॉग यह दर्शाता है:

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ git rev-parse --show-cdup 
../../ 

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ git config alias.cdup 'rev-parse --show-cdup' 

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ git cdup 
../../ 

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ git config alias.cdup2 '!git rev-parse --show-cdup' 

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ git cdup2 

[email protected] /c/src/WiRE.git/wdf/src (pt/wdf) 
$ 

आपका उदाहरण 'गिट' से शुरू होने वाले उपनाम आदेश का उपयोग करता है। अगर मैं 'गिट रेव-पार्स - शो-सीडीयूपी' को उपनाम के रूप में सेट करने का प्रयास करता हूं तो यह गिट कमांड नहीं है, तो मुझे संदेह है कि मुझे वास्तव में विस्मयादिबोधक चिह्न था इसलिए इसे शेल कमांड के रूप में चला रहा था, इस प्रकार अपूर्ण से चल रहा है।

13

Git का उपनाम। सरल उपनाम (! के बिना) वर्तमान निर्देशिका में चलाएं।

+0

धन्यवाद स्टीफन, इसने मेरे मूल प्रश्न का उत्तर दिया, अब मैं उम्मीद कर रहा हूं कि यह उसी स्थिति में दूसरों के लिए अधिक उपयोगी हो। –

+3

यह एक काफी अनजान गिट व्यवहार है। क्या किसी को पता है कि वर्तमान निर्देशिका में उपनाम कैसे चलाया जाए? या यदि वर्तमान निर्देशिका एक env var या कुछ में उपलब्ध है ताकि कोई उपनाम चलने से पहले सही जगह पर 'cd' वापस कर सके? –

+0

@ जिमस्टवार्ट ऊपर आंद्रेई नेकुलू के उत्तर को देखते हैं, यह दिखाता है कि यह कैसे करें :) – waldyrious

22

क्या मैं निर्देशिका में कमांड चलाने के लिए कोई तरीका है, या निर्दिष्ट?

हाँ, वहां है। जब आप गिट कमांड चलाते हैं, तो आपके पर्यावरण को GIT_PREFIX वैरिएबल पथ के मूल्य के साथ वैरिएबल पथ (गेट निष्पादित करने से पहले पथ से लेकर पथ तक) प्राप्त होता है, इसलिए आपको अपनी गिट उपनाम उपसर्ग करना है (जो शेल कमांड चलाता है और सही pwd की आवश्यकता होती है) cd ${GIT_PREFIX:-.} && के साथ।

सरल परीक्षण, अपने ~/.gitconfig

[alias] p = !pwd && cd ${GIT_PREFIX:-.} && pwd

+2

'$ {GIT_PREFIX: -।} 'वाक्यविन्यास की व्याख्या के लिए, देखें: http://stackoverflow.com/a/16753536/ 79111। –

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