2010-03-23 13 views
71

Chcę wiedzieć, czy istnieje sposób domyślnego ustawienia flagi dla polecenia git. W szczególności chcę ustawić flagę --abbrev-commit tak, aby podczas wykonywania git log, chcę wykonać git log --abbrev-commit.Ustawianie domyślnych flag git dla komend

W przeciwieństwie do pytania "is there any way to set a flag by default for a git command?", najwyraźniej nie ma flagi konfiguracji do dodania --abbrev-commit do dziennika git. Ponadto instrukcja git stwierdza, że ​​nie mogę utworzyć aliasu: "To avoid confusion and troubles with script usage, aliases that hide existing git commands are ignored"

Moja trzecia opcja to wymyślenie nowego aliasu, takiego jak glog=log --abbrev-commit w pliku .gitconfig. Ale wolałbym nie wymyślać własnego DSL z nowymi poleceniami.

Czy istnieje inny sposób, aby to osiągnąć, aby flaga abbrev-commit była ustawiona domyślnie?

+1

Od gita 1.7.6 jest flaga kontrolująca to zachowanie. Zobacz odpowiedź od @underrun poniżej. – slacy

Odpowiedz

45

Od wersji git 1.7.6, git config zyskał opcję log.abbrevCommit, którą można ustawić na true. Zatem odpowiedzią jest upgrade do co najmniej 1.7.6 (aktualny od tego pisania wynosi 1.7.11.4) i użycie:

git config --global log.abbrevCommit true 
+2

Nie sądzę, że istnieje opcja dla linii na linii? – Zaz

+16

@Josh, na pewno jest: 'git config --global format.pretty oneline' – underrun

+1

Akceptuję tę odpowiedź. Miło widzieć, że Git dodał tę konfigurację, ponieważ napisałem to pytanie prawie cztery lata temu. –

2

Każde narzędzie, z którego korzystamy (svn, maven, git, ...) jest zawsze hermetyzowane w .bat (w systemie Windows lub .sh na systemie Unix), aby zaoferować naszym programistom jeden katalog do dodania do ich ścieżki .

Jeśli git jest enkapsulowany w skrypcie otoki, to ... wszystko jest możliwe.

Ale pozostaje to rozwiązanie związane z konfiguracją użytkownika, nie związane z samym Git lub repozytorium git.

+0

Masz na myśli, że powinienem móc to osiągnąć, dodając alias do mojego .bash_profile? –

+0

@Jesper: To jest pomysł, ponieważ twój wrapper git.bat będzie w stanie wykryć, które polecenie Git chcesz wykonać i może dodać dowolną opcję, którą chce. – VonC

30

Nie ma generalnego mechanizmu w git, aby ustawić domyślne argumenty dla poleceń.

Można użyć git aliases zdefiniować nowe polecenie z wymaganymi argumentami:

git config alias.lg "log --oneline" 

Następnie można uruchomić git lg.

Niektóre polecenia mają również ustawienia konfiguracyjne, aby zmienić ich zachowanie.

+9

Chcę uniknąć tworzenia własnej składni, więc wolę rozwiązanie, w którym nie używam 'git lg', ale' git log' –

+0

, dlaczego? jaka to różnica? – hasen

+35

Bardzo ważną różnicą jest to, że nie chcę wprowadzać "Jespers git syntax" w moim systemie. Chcę, aby ja (i inni używający mojego komputera) korzystali z ogólnych poleceń. To również przyspieszy moją pracę na innych komputerach: nie martwię się przypadkowym wpisywaniem "git lg" i otrzymywaniem błędu "nie znaleziono". –

41

Można użyć formatu niestandardowego mieć git log naśladować --abbrev-commit domyślnie:

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

interesujące! Dzięki za odpowiedź, która jest dla mnie bardzo przydatna! –

+0

Świetnie, jest to z pewnością najlepsza odpowiedź. – duane

+0

Możesz także użyć kolorów podczas formatowania: "% C (żółty)% h% Creset% s" pojawi się jak git log - line z kolorami. – Avner

9

VonC już wskazywały na owinięcie powłoki na jego odpowiedź; tutaj jest moja implementacja takiego wrappera Bash. Jeśli umieścisz to np. do twojej .bashrc, twoja interaktywna powłoka będzie obsługiwać nadpisywanie wbudowanych poleceń Git, jak również wielkich aliasów.

# 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" "[email protected]" 
    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" "[email protected]" 
    else 
     "$(which git)" "[email protected]" 
    fi 
} 

Następnie można zastąpić git log umieszczając skrypt o nazwie git-log gdzieś w PATH:

#!/bin/sh 
git log --abbrev-commit "[email protected]" 
+0

To działa gratulacje, bardzo dziękuję – Clive

4

mam podobny problem (wiele opcji domyślnych poleceń Git są głupie). Oto moje podejście. Utwórz skrypt o nazwie „grys” (lub cokolwiek) na swojej drodze, jak następuje:

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

bardzo proste do odczytania i utrzymania, w przypadku trzeba podzielić się nią z Bash laików.

+0

Naprawdę chcesz "git remote blah" nazywać "git branch blah"? Używam wariantu tego, w którym umieściłem git wcześniej na ścieżce, a następnie jawnie wywołuję/usr/bin/git w moim skrypcie. Tak, to prawdopodobnie coś zepsuje. – LovesTha

Powiązane problemy