आदेशों पर गिट डिफ़ॉल्ट झंडे स्थापित करना


89

मैं जानना चाहता हूं कि क्या git कमांड के लिए डिफ़ॉल्ट रूप से ध्वज सेट करने का कोई तरीका है। विशेष रूप से, मैं --abbrev-commitध्वज को सेट करना चाहता हूं ताकि निष्पादित करते समय git log, मैं निष्पादित करना चाहता हूंgit log --abbrev-commit

इस सवाल के विपरीत " क्या गिट कमांड के लिए डिफ़ॉल्ट रूप से ध्वज सेट करने का कोई तरीका है? ", स्पष्ट रूप से गिट लॉग में --abbrev-प्रतिबद्ध को जोड़ने के लिए कॉन्फ़िगरेशन ध्वज नहीं है। इसके अलावा, गिट मैनुअल में कहा गया है कि मैं एक उपनाम नहीं बना सकता: "स्क्रिप्ट उपयोग के साथ भ्रम और परेशानियों से बचने के लिए, मौजूदा गिट आदेशों को छिपाने वाले उपनामों को अनदेखा किया जाता है"

मेरा तीसरा विकल्प glog=log --abbrev-commitमेरी .gitconfig फ़ाइल की तरह एक नए उपनाम का आविष्कार करना है । लेकिन मैं नए कमांड के साथ अपने खुद के डीएसएल का आविष्कार नहीं करूंगा।

क्या इसे प्राप्त करने का एक और तरीका है ताकि abbrev-commitध्वज डिफ़ॉल्ट रूप से सेट हो जाए ??


1
Git 1.7.6 के रूप में इस व्यवहार को नियंत्रित करने के लिए एक ध्वज है। नीचे @underrun द्वारा उत्तर देखें।
slacy

जवाबों:


59

जीआईटी संस्करण 1.7.6 के बाद से, जीआईटी कॉन्फिगर ने एक लॉग.abbrevCommit विकल्प प्राप्त किया है जिसे सही पर सेट किया जा सकता है। इस प्रकार उत्तर कम से कम 1.7.6 में अपग्रेड होता है (वर्तमान में यह लेखन 1.7.11.4 है) और उपयोग करें:

git config --global log.abbrevCommit true

2
क्या यह नहीं है कि वहाँ एक विकल्प के लिए है?
ज़ाज़

1
मैं इस जवाब को स्वीकार कर रहा हूं। मुझे यह देखकर अच्छा लगा कि मैंने लगभग चार साल पहले प्रश्न लिखा था।
जेसपर रॉन-जेनसेन

इन सभी रहस्यमय विकल्पों का स्रोत कहां है?
xaxxon

किसी को भी ग्राफ के लिए डिफ़ॉल्ट ध्वज पता है? मैं इसे पेज @xaxxon से लिंक नहीं कर सकता ..
myol

@ यमोल, आपको अपने इंस्टॉलेशन से मेल खाते दस्तावेज का उपयोग करना चाहिए git config --helpया git help configप्राप्त करना चाहिए ।
१18 को १

46

आप डिफ़ॉल्ट रूप से git logनकल करने के लिए एक कस्टम प्रारूप का उपयोग कर सकते हैं --abbrev-commit:

git config format.pretty "format:%h %s"

महान, यह आसानी से सबसे अच्छा जवाब है।
Duane

स्वरूपण करते समय आप रंगों का भी उपयोग कर सकते हैं: "% C (पीला)% h% Creset% s" रंगों के साथ git log --online की तरह प्रस्तुत होगा।
अवनर

1
अब एक त्वरित प्रश्न: यदि आपको यह उपयोगी लगा और यह बिल्कुल समस्या का उत्तर देता है, तो आप इसे सही क्यों नहीं मानते हैं?
igorsantos07

1
यह बेहतर है यदि आप उपनामों को याद रखने के लिए अस्पष्ट या कठिन याद नहीं करना चाहते हैं और हर समय केवल "गिट लॉग" का उपयोग करना पसंद करते हैं।
श्याम हबरकादा

1
यह मेरे लिए सबसे अच्छा जवाब था। log.abbrevCommitसेटिंग प्रारूपों, जो मैं पसंद नहीं आया वर्बोज़ अन्य अधिक प्रभावित किया। इसके अलावा, %C(auto)%h %sस्वचालित रंग के साथ सामान्य ऑनलाइन प्रारूप प्राप्त करने के लिए उपयोग करें। मैंने इस्तेमाल किया git config --global format.pretty "%C(auto)%h %d %s"क्योंकि मैं अपने "डिफ़ॉल्ट"
davenpcj

34

आदेशों के लिए डिफ़ॉल्ट तर्क सेट करने के लिए गिट में कोई सामान्य तंत्र नहीं है।

आप आवश्यक तर्क के साथ एक नई कमांड को परिभाषित करने के लिए git उपनाम का उपयोग कर सकते हैं :

git config alias.lg "log --oneline"

तब तुम दौड़ सकते हो git lg

कुछ आदेशों में उनके व्यवहार को बदलने के लिए कॉन्फ़िगरेशन सेटिंग्स भी होती हैं।


12
मैं अपना स्वयं का सिंटैक्स बनाने से बचना चाहता हूं, इसलिए मैं एक ऐसे समाधान को प्राथमिकता दूंगा जहां मैं उपयोग न करूं git lgलेकिनgit log
जेसपर रॉन-जेनसन

क्यों? इससे क्या फर्क पड़ेगा?
hasen

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

19
यदि कोई अन्य व्यक्ति आपकी मशीन का उपयोग कर रहा है और टाइप किए गए गिट लॉग आपके इच्छित समाधान का अर्थ होगा कि उन्हें ऐसे परिणाम मिलेंगे जिनकी उन्हें उम्मीद नहीं थी।
अबिज़र्न

1
मानक उपनामों को पुनर्परिभाषित करना स्क्रिप्ट को तोड़ सकता है।
जस्टिनिमे

10

VonC पहले ही अपने जवाब में एक शेल आवरण पर संकेत दे चुका है; यहाँ इस तरह के रैपर का मेरा बैश कार्यान्वयन है। यदि आप इसे उदाहरण के लिए अपने में डालते हैं .bashrc, तो आपका इंटरएक्टिव शेल Git में निर्मित कमांडों के साथ-साथ अपरकेस अलायन्स के ओवरराइडिंग का समर्थन करेगा।

# Git supports aliases defined in .gitconfig, but you cannot override Git
# builtins (e.g. "git log") by putting an executable "git-log" somewhere in the
# PATH. Also, git aliases are case-insensitive, but case can be useful to create
# a negated command (gf = grep --files-with-matches; gF = grep
# --files-without-match). As a workaround, translate "X" to "-x". 
git()
{
    typeset -r gitAlias="git-$1"
    if 'which' "$gitAlias" >/dev/null 2>&1; then
        shift
        "$gitAlias" "$@"
    elif [[ "$1" =~ [A-Z] ]]; then
        # Translate "X" to "-x" to enable aliases with uppercase letters. 
        translatedAlias=$(echo "$1" | sed -e 's/[A-Z]/-\l\0/g')
        shift
        "$(which git)" "$translatedAlias" "$@"
    else
        "$(which git)" "$@"
    fi
} 

फिर आप अपने PATH में कहीं git logनाम की स्क्रिप्ट लगाकर ओवरराइड कर सकते हैं git-log:

#!/bin/sh
git log --abbrev-commit "$@"

7

मेरे पास एक समान मुद्दा है (Git कमांड के कई डिफ़ॉल्ट विकल्प गूंगे हैं)। यहाँ मेरा दृष्टिकोण है। अपने पथ पर 'ग्रिट' (या जो भी हो) नामक एक स्क्रिप्ट बनाएं, जो निम्नानुसार है:

#!/bin/bash
cmd=$1
shift 1
if [ "$cmd" = "" ]; then
  git
elif [ $cmd = "log" ]; then
  git log --abbrev-commit $@
elif [ $cmd = "branch" ]; then
  git branch -v $@
elif [ $cmd = "remote" ]; then
  git remote -v $@
else
  git $cmd $@
fi

पढ़ने और बनाए रखने के लिए बहुत ही सरल, अगर आपको इसे बैश गैर-विशेषज्ञों के साथ साझा करने की आवश्यकता है।


क्या आप वास्तव में "गिट रिमोट ब्लाह" को "गिट ब्रांच ब्लाह" कहना चाहते हैं? मैं इसके एक संस्करण का उपयोग कर रहा हूं, जहां मैंने पहले पथ में गिट लगाया था और फिर अपनी स्क्रिप्ट में स्पष्ट रूप से / usr / bin / git को कॉल किया। हाँ यह शायद कुछ टूट जाता है।
लवशाथा

1
मुझे यह पसंद आया और मैंने दो अतिरिक्त मोड़ दिए। मैंने इसे एक बाश फ़ंक्शन बनाया और gitवास्तविक कमांड पथ प्राप्त करने के लिए पहली पंक्ति को जोड़कर इसका नाम दिया thegit=`/usr/bin/which git`। और मैं की तरह आदेश से पहले एक एक्स के साथ ओवरराइड रद्द करने के लिए एक विकल्प जोड़ा git x log ...: if [ "$cmd" = "x" ]; then; $thegit $@
जोशुआ गोल्डबर्ग


0

हमारे डेवलपर्स हर एक उपयोगिता का उपयोग करते हैं (svn, maven, git, ...) हमेशा एक .bat (विंडोज़ पर, या यूनिक्स पर .sh) में इनकैप्सुलेटेड होते हैं, ताकि हमारे डेवलपर्स को अपने पथ में जोड़ने के लिए एक निर्देशिका प्रदान करने के लिए।

यदि आवरण स्क्रिप्ट में git को समझाया जाता है, तो ... सब कुछ संभव है।

लेकिन यह उपयोगकर्ता के सेटअप से जुड़ा एक समाधान बना हुआ है, जो खुद Git या git repo से जुड़ा नहीं है।


तो आपका मतलब है कि मुझे मेरे .bash_profile में उपनाम जोड़कर इसे प्राप्त करने में सक्षम होना चाहिए?
जेसपर रॉन-जेनसेन

@ जेस्पर: यह विचार है, क्योंकि आपका रैपर git.bat यह पता लगाने में सक्षम होगा कि आप कौन से Git कमांड को निष्पादित करना चाहते हैं और इसमें कोई भी विकल्प जोड़ सकते हैं।
वॉनक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.