2009-08-20 8 views
63

मैं निम्नलिखित बैश खोल कोड एम्बेड कर सकते हैं अंदर: एक Git उर्फ ​​के निर्माण मेंसीधे बैश स्क्रिप्ट एम्बेड करने के लिए कैसे एक Git उर्फ ​​

for name in $(git diff --name-only $1); do git difftool $1 $name & done 
सीधे

:

git config --global alias.diffall ***my-bash-code-here*** 

इस से पर ले जाता है मेरी

git config --global alias.diffall '!sh diffall.sh' 

लेकिन Nev में: previous question/answer अतः, और उसके बाद जहां मैं एक .sh फ़ाइल में कोड डाल पर फाइल करने के लिए एलियास सादगी के लिए er-ending quest, फ़ाइल को छोड़ने और सीधे उपनाम में कोड डालने का एक तरीका होना चाहिए? मैं प्रारूप को समझ नहीं सकता ...

उत्तर

70
git config --global alias.diffall '!sh diffall.sh' 

यह एक तरह से बेमानी है। यदि आप अपने $ PATH में 'diffall.sh' जोड़ने जा रहे हैं, तो इसे 'गिट-भिन्न' के रूप में क्यों न सहेजें, और स्वयं को उपनाम घोषित करने से बचाएं। हां, "गिट diffall" इसे चलाएगा।

+0

वह। महान है। मैं शुरुआत में चिंतित था कि मैं गलती से कुछ चलाने के लिए कुछ खोल स्क्रिप्ट लिखी है, और उन्हें उपसर्ग 'गिट-', लेकिन मेरा खोल (zsh) उन्हें स्वत: पूर्ण नहीं करता है, इसलिए मुझे उन्हें स्पष्ट रूप से टाइप करना होगा। और अगर मैं स्वतः पूर्ण व्यवहार चाहता हूं, तो मैं अपने स्वयं के उपमहाद्वीप में एक गिट उपनाम घोषित कर सकता हूं, जो कि एक स्क्रिप्ट से लिंक को सबकंड स्पष्ट करने के लिए भी एक आवश्यकता है। –

+0

यूप, और यह एक बाइनरी है, आपको सिर्फ धमाके की जरूरत है: '! बाइनरी ' –

13

इन 2 लाइन को अपनी .git/config फ़ाइल में जोड़ना चाल करना चाहिए।

[alias] 
    diffall = '!for name in $(git diff --name-only $1); do git difftool $1 $name & done' 

संपादित करें: शायद Git-config संस्करण भी काम करता है, लेकिन मैं प्रबंधन में आसानी के लिए कॉन्फ़िग फ़ाइल में मेरी उपनाम रखने के लिए पसंद करते हैं।

उस उपनाम बताते हैं बहुत स्पष्ट रूप से Git विकि पर एक अच्छा पृष्ठ है: http://git.or.cz/gitwiki/Aliases विशेष रूप से, पढ़ा 'के साथ उन्नत उपनाम तर्क'

+0

गिट कॉन्फ़िगरेशन - ग्लोबल आपके एलियास को $ HOME/.gitconfig पर संग्रहीत करेगा, जहां (आईएमओ) उन्हें प्रबंधित करना और भी आसान है; लगभग कोई उपनाम भंडार विशिष्ट होने की आवश्यकता नहीं है। (रेपो विशिष्ट रेपो/.git/config में जाएं) – u0b34a0f6ae

+0

धन्यवाद डेविड, लेकिन यह सिर्फ मेरे लिए काम नहीं करेगा - या आपके द्वारा शामिल किए गए महान लिंक में बदलावों में से कोई भी। शायद मुझे यह उल्लेख करना चाहिए था कि मैं विंडोज वातावरण में चल रहा हूं? धन्यवाद कैज़र, सहमत है, यह मेरे लिए 'वैश्विक' है। –

+0

इन दिनों, https://git.wiki.kernel.org/index.php/Aliases#Advanced देखने के लिए एक अच्छी जगह है। (गिट या सीजे लिंक वहां रीडायरेक्ट करता है, लेकिन विशेष रूप से यह खंड तर्कों के साथ जटिल चीजें चला रहा है) – clacke

20

मुझे प्रलेखन में नहीं मिला, लेकिन यदि आप पथ में "git-< नाम>" स्क्रिप्ट बनाते हैं, तो आप इसे अपने रेपो में "गिट नाम" के साथ कॉल कर सकते हैं।

देखें:

$ cd ~/bin 
$ echo "echo I love this log: 
>pwd 
>git log --graph --summary --decorate --all" > git-logg 
$ chmod +x git-logg 
$ cd /path/to/your/repo 
$ git logg 
I love this log: 
/path/to/your/repo 
* commit 3c94be44e4119228cc681fc7e11e553c4e77ad04 (whatever-branch) 
| Author: myself <[email protected](none)> 
| Date: Fri Apr 1 16:47:20 2011 +0200 
| 
|  would have been better not to do it at all 
| 
... 
$ 

तो, आप आप इस (बल्कि अस्पष्ट) रास्ता भी साथ की तरह किसी भी अन्य नाम लिख सकते हैं।

और भी अधिक आप फ़ंक्शन को परिभाषित करने वाले उस नए कमांड में स्वत: पूर्णता जोड़ सकते हैं। जानकारी here

$ _git_logg() 
{ 
    # you can return anything here for the autocompletion for example all the branches 
    __gitcomp_nl "$(__git_refs)" 
} 
+0

+1, सोचा कि यह केवल गिट libexec फ़ोल्डर से काम करेगा। इस टिप को साझा करने के लिए धन्यवाद –

-3

(ProGit प्रलेखन से: http://progit.org/book/ch7-3.html)

आप .git/हुक में एक स्क्रिप्ट जोड़ने की कोशिश की है?

उदाहरण के लिए, यदि आप एक स्क्रिप्ट बनाते हैं।Git/हुक/उत्तर चेकआउट:

#!/bin/bash 

echo "This is run after a 'git checkout'" 

और उसके बाद कमांड चलाएँ:

$ git checkout master 
Switched to branch 'master' 
This is run after a 'git checkout' 
+3

कॉन्फ़िगरेशन, एक्सटेंशन और उपनामों के साथ हुक को क्या करना है? –

20

एक Git उर्फ ​​के अंदर कमांड चलाने के लिए, और विशेष रूप से उन आदेशों का तर्क पारित करने के लिए, आप की संभावना होगा एक अस्थायी समारोह है जो आप तो तुरंत आह्वान बनाने के लिए:

$ vim ~/.gitconfig 
... 
[alias] 
    # compare: 
    foo = "! echo begin arg=$1/$2/end" 
    foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f" 

इस उदाहरण में, समारोह शायद तुम क्या जरूरत है (और यह भी आप एक ही "स्टेट में क्या कर सकते हैं के रूप में अधिक लचीला है ement "); और आप शायद यह बता सकते हैं कि दोनों विकल्पों के लिए, गिट कमांड को शेष तर्क केवल उपनाम के रूप में पास किए जाते हैं, भले ही यह "गूंज" या "एफ" हो; समारोह लागू बस आर्ग की खपत, अनदेखी क्या स्पष्ट रूप से उपयोग नहीं किया जाता:

$ git foo a b c 
begin arg=a/b/end a b c 

$ git foo2 a b c 
begin arg=a/b/end 

एक अन्य उदाहरण (सूचियों सभी उपनाम, मिलान पैटर्न के आधार पर) (नोट: आप एक ही समारोह का नाम पुन: उपयोग रख सकते "च()" भर में .gitconfig):

[alias] 
    alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f" 

सिर्फ "foo $" के लिए पहले रिटर्न उर्फ, के लिए दूसरी "foo *।":

$ git alias foo 
alias.foo ! echo begin arg=$1/$2/end 

$ git alias 'foo.*' 
alias.foo ! echo begin arg=$1/$2/end 
alias.foo2 !f() { echo begin arg=$1/$2/end; }; f 

(nb: वास्तविक परिणाम खोल के आधार पर भिन्न हो सकते हैं ; मैं उपयोग कर रहा हूँ यह लिनक्स पर बैश के साथ, यूनिक्स & सिगविन (विंडोज़)।

+0

https://git.wiki.kernel.org/index.php/Aliases#What.27s_new.3F स्पष्ट रूप से 'sh -c' का उपयोग करने की अनुशंसा करता है, इस तरह आपको चिंता करने की ज़रूरत नहीं है कि उपयोगकर्ता का लॉगिन खोल क्या है। – clacke

+0

मैंने प्रदान किया गया फ़ंक्शन सिंटैक्स जानबूझकर कुछ गोले (sh/ksh/bash/zsh) में पोर्टेबल है, और एक उपप्रोसेस लॉन्च करने से तेज़ होगा। मैं अभी भी फ़ंक्शन सिंटैक्स का उपयोग करने की अनुशंसा करता हूं, जब तक कि किसी विशिष्ट प्लेटफ़ॉर्म पर कोई विशिष्ट पोर्टेबिलिटी समस्या न हो। – michael

+0

आपकी टिप्पणी ने मुझे इस उत्तर में वापस लाया, और शायद मैं आपके रास्ते का उपयोग करने जा रहा हूं। यह उद्धरण के एक स्तर को बचाता है, और वे स्तर जितना पागल हो उतना पागल हो जाते हैं। :-) – clacke

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