Komutlarda git varsayılan bayraklarını ayarlama


89

Git komutu için varsayılan olarak bir bayrak ayarlamanın bir yolu olup olmadığını bilmek istiyorum. Özellikle, --abbrev-commitbayrağı, yürütme sırasında yürütmek isteyecek şekilde ayarlamak git logistiyorum git log --abbrev-commit.

" Git komutu için varsayılan olarak bir bayrak ayarlamanın bir yolu var mı? " Sorusunun aksine, git log'a --abbrev-commit eklemek için bir yapılandırma bayrağı yok. Ayrıca git kılavuzu bir takma ad oluşturamadığımı belirtiyor: "Komut dosyası kullanımıyla ilgili karışıklığı ve sorunları önlemek için, mevcut git komutlarını gizleyen takma adlar yok sayılır"

Üçüncü seçeneğim, glog=log --abbrev-commit.gitconfig dosyamdaki gibi yeni bir takma ad icat etmektir. Ancak yeni komutlarla kendi DSL'imi icat etmemeyi tercih ederim.

abbrev-commitBayrağın varsayılan olarak ayarlanması için bunu başarmanın başka bir yolu var mı ?


1
1.7.6 sürümünden itibaren bu davranışı kontrol etmek için bir işaret bulunmaktadır. Aşağıda @underrun tarafından verilen cevaba bakın.
slacy

Yanıtlar:


60

Git sürüm 1.7.6'dan beri git config, true olarak ayarlanabilen bir log.abbrevCommit seçeneği kazandı. Bu nedenle, cevap en az 1.7.6'ya yükseltilir (bu yazı itibariyle güncel 1.7.11.4'tür) ve şunu kullanın:

git config --global log.abbrevCommit true

3
Oneline için bir seçenek olduğunu düşünmüyor musunuz?
Zaz

1
Bu cevabı kabul ediyorum. Soruyu neredeyse dört yıl önce yazdığımdan beri Git'in bu yapılandırmayı eklediğini görmek güzel.
Jesper Rønn-Jensen

Tüm bu mistik seçeneklerin kaynağı nerede?
xaxxon

Grafik için varsayılan bayrağı bilen var mı? Sayfayı bulamıyorum @xaxxon linked ..
myol

@myol, kullanmak gerekir git config --helpveya git help configbelgeler elde etmek kurulumunuzu uyan .
doak

46

Varsayılan olarak git logtaklit etmek için özel bir format kullanabilirsiniz --abbrev-commit:

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

Harika, bu kolayca en iyi cevap.
duane

Biçimlendirme sırasında renkleri de kullanabilirsiniz: "% C (sarı)% h% Creset% s", git log --oneline gibi renklerle gösterilecek.
Avner

1
Şimdi hızlı bir soru: Bunu yararlı bulduysanız ve bu tam olarak soruna yanıt veriyorsa, neden bunu doğru olarak işaretlemiyorsunuz?
igorsantos07

1
Belirsiz veya hatırlaması zor takma adları hatırlamak istemiyorsanız ve her zaman sadece "git log" kullanmayı tercih ediyorsanız bu daha iyidir.
Shyam Habarakada

1
Bu benim için en iyi cevaptı. log.abbrevCommitAyar ben sevmedim formatları, ayrıntılı diğer daha etkiledi. Ayrıca, %C(auto)%h %sotomatik renklendirme ile normal çevrimiçi formatı elde etmek için kullanın . git config --global format.pretty "%C(auto)%h %d %s"Oneline'ı "varsayılan" olarak dekore etmek istediğim için kullandım
davenpcj

34

Git'te komutlar için varsayılan argümanlar ayarlamak için genel bir mekanizma yoktur.

Git takma adlarını gerekli bağımsız değişkenlerle yeni bir komut tanımlamak için kullanabilirsiniz :

git config alias.lg "log --oneline"

Sonra koşabilirsiniz git lg.

Bazı komutların davranışlarını değiştirmek için yapılandırma ayarları da vardır.


12
Kendi sözdizimimi oluşturmaktan kaçınmak istiyorum, bu yüzden kullanmadığım bir çözümü tercih ederim git lgamagit log
Jesper Rønn-Jensen

neden? Ne fark eder ki?
hasen

46
En önemli fark, sistemime "Jespers git sözdizimi" eklemek istemememdir. Benden (ve makinemi kullanan diğerlerinin) genel komutları kullanmasını istiyorum. Ayrıca bu, diğer makinelerde çalışmamı hızlandıracak: Yanlışlıkla "git lg" yazıp "bulunamadı" hatası alma konusunda endişelenmiyorum
Jesper Rønn-Jensen

19
Makinenizi başka biri kullanıyor ve git log yazıyorsa, amaçladığınız çözüm, beklemedikleri sonuçları alacağı anlamına gelirdi.
Abizern

1
Standart takma adların yeniden tanımlanması komut dosyalarını bozabilir.
justintime

10

VonC cevabında bir kabuk sarmalayıcıya işaret etti; İşte benim Bash uygulamam böyle bir sarmalayıcı. Bunu .bashrc, örneğin kendi içine koyarsanız , etkileşimli kabuğunuz Git yerleşik komutlarının yanı sıra büyük harf takma adlarının geçersiz kılınmasını destekleyecektir.

# 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
} 

Daha sonra PATH'inize herhangi git logbir git-logyerde adlandırılmış bir komut dosyası ekleyerek geçersiz kılabilirsiniz :

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


7

Benzer bir sorunum var (Git komutları için varsayılan seçeneklerin çoğu aptalca). İşte benim yaklaşımım. Aşağıdaki gibi, yolunuzda 'kum' (veya her neyse) adlı bir komut dosyası oluşturun:

#!/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

Uzman olmayan Bash ile paylaşmanız gerekirse diye okumak ve sürdürmek çok kolaydır.


Gerçekten "git remote blah" ın "git branch blah" demesini istiyor musun? Git'i daha önce yola koyduğum ve ardından komut dosyamda / usr / bin / git'i açıkça çağırdığım bir varyantını kullanıyorum. Evet, bu muhtemelen bir şeyi bozar.
LovesTha

1
Bunu beğendim ve iki ek ayar yaptım. Bunun bir bash fonksiyonu yaptı ve adlandırılması izin gitgerçek komut yolunu almak için bir ilk satırı ekleyerek: thegit=`/usr/bin/which git`. Ve ben komuta önce x ile geçersiz kılmaları iptal etmek için bir seçenek eklendi git x log ...: if [ "$cmd" = "x" ]; then; $thegit $@.
Joshua Goldberg

0

Kullandığımız her yardımcı program (svn, maven, git, ...) geliştiricilerimize yollarına ekleyebilecekleri bir dizin sunmak için her zaman bir .bat (Windows'ta veya Unix'te .sh) içinde kapsüllenir.

Git bir sarmalayıcı betiğinde kapsüllenmişse, o zaman ... her şey mümkündür.

Ancak bu, Git'in kendisine veya git deposuna bağlı olmayan, kullanıcının kurulumuyla bağlantılı bir çözüm olarak kalır.


Yani bunu .bash_profile profilime takma ad ekleyerek başarabilmem gerektiğini mi söylüyorsunuz?
Jesper Rønn-Jensen

@Jesper: fikir bu, çünkü sarmalayıcınız git.bat yürütmek istediğiniz Git komutunu algılayabilir ve istediği herhangi bir seçeneği ekleyebilir.
VonC
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.