명령에 git 기본 플래그 설정


89

git 명령에 대해 기본적으로 플래그를 설정하는 방법이 있는지 알고 싶습니다. 특히, 나는 --abbrev-commit실행할 때 git log나는 실행 하고 싶 도록 플래그 를 설정하고 싶습니다 git log --abbrev-commit.

" git 명령에 대해 기본적으로 플래그를 설정할 수있는 방법이 있습니까? " 라는 질문과 달리 --abbrev-commit을 git log에 추가하기위한 구성 플래그가없는 것 같습니다. 또한 git 매뉴얼에는 별칭을 만들 수 없다고 나와 있습니다. "스크립트 사용과 관련된 혼동과 문제를 방지하기 위해 기존 git 명령을 숨기는 별칭은 무시됩니다."

세 번째 옵션은 glog=log --abbrev-commit.gitconfig 파일 과 같은 새 별칭을 만드는 것 입니다. 그러나 나는 새로운 명령으로 내 자신의 DSL을 발명하지 않을 것입니다.

abbrev-commit플래그가 기본적으로 설정 되도록 다른 방법이 있습니까 ??


1
git 1.7.6부터이 동작을 제어하는 ​​플래그가 있습니다. 아래 @underrun의 답변을 참조하십시오.
slacy

답변:


59

git 버전 1.7.6부터 git config는 true로 설정할 수있는 log.abbrevCommit 옵션을 얻었습니다. 따라서 대답은 최소한 1.7.6 (이 글 현재 1.7.11.4)으로 업그레이드하고 다음을 사용하는 것입니다.

git config --global log.abbrevCommit true

2
한 줄에 대한 옵션이 있다고 생각하지 않습니까?
Zaz

1
나는이 대답을 받아들이고있다. 거의 4 년 전에 질문을 작성한 이후 Git이이 구성을 추가 한 것을 보니 반갑습니다.
Jesper Rønn-Jensen 2014

이 모든 신비한 옵션의 출처는 어디입니까?
xaxxon

누구나 그래프의 기본 플래그를 알고 있습니까? @xaxxon 링크 된 페이지에서 찾을 수 없습니다 ..
myol

@myol, git config --help또는 git help config을 사용 하여 설치와 일치 하는 문서를 가져와야 합니다 .
doak

46

사용자 정의 형식을 사용하여 기본적으로 git log모방 할 수 있습니다 --abbrev-commit.

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

좋습니다. 이것은 쉽게 최고의 답변입니다.
duane

형식을 지정하는 동안 색상을 사용할 수도 있습니다. "% C (yellow) % h % Creset % s"는 git log --oneline with colors와 같이 표시됩니다.
Avner

1
이제 간단한 질문입니다. 이것이 유용하다고 생각하고 이것이 문제에 정확히 답한다면, 이것을 올바른 것으로 표시하지 않는 이유는 무엇입니까?
igorsantos07

1
모호하거나 기억하기 어려운 별칭을 기억하고 싶지 않고 항상 "git log"를 사용하는 것을 선호하는 경우이 방법이 더 좋습니다.
Shyam Habarakada 2014

1
이것이 저에게 가장 좋은 대답이었습니다. log.abbrevCommit설정은 내가 좋아하지 않는 형식, 상세 다른 많은 영향을 미쳤다. 또한 %C(auto)%h %s자동 채색으로 일반 한 줄 형식을 얻는 데 사용 합니다. 내가 사용하는 git config --global format.pretty "%C(auto)%h %d %s"내 "기본"으로 oneline 장식하고 싶었 기 때문에
davenpcj

34

git에는 명령에 대한 기본 인수를 설정하는 일반적인 메커니즘이 없습니다.

git 별칭 을 사용하여 필수 인수로 새 명령을 정의 할 수 있습니다 .

git config alias.lg "log --oneline"

그런 다음 git lg.

일부 명령에는 동작을 변경하기위한 구성 설정도 있습니다.


12
나는 내가 사용하지 않는 곳 솔루션을 선호하는 것 때문에 내 자신의 구문을 만들지 않도록하려는 git lg하지만git log
예스퍼 Rønn - 젠슨

왜? 어떤 차이를 만들까요?
hasen

46
매우 중요한 차이점은 시스템에 "Jespers git syntax"를 도입하고 싶지 않다는 것입니다. 나 (및 내 컴퓨터를 사용하는 다른 사용자)가 일반 명령을 사용하기를 바랍니다. 또한이 다른 시스템에 빨리 내 작품을 만들 것입니다 : 내가 실수로 "자식 LG"를 입력하고 것에 대해 걱정하지 않는 오류 "을 (를) 찾을 수 없습니다"
예스퍼 Rønn - 젠슨

19
다른 사람이 귀하의 컴퓨터를 사용하고 git log를 입력했다면 의도 한 솔루션은 예상치 못한 결과를 얻게 될 것입니다.
Abizern 2010

1
표준 별칭을 재정의하면 스크립트가 손상 될 수 있습니다.
justintime

10

VonC는 이미 그의 답변에서 쉘 래퍼를 암시했습니다. 여기에 그러한 래퍼의 Bash 구현이 있습니다. 예를 들어 이것을에 넣으면 .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
} 

그런 다음 git log이름이 지정된 스크립트를 git-logPATH 에 넣어 재정의 할 수 있습니다 .

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

7

비슷한 문제가 있습니다 (Git 명령에 대한 기본 옵션 중 대부분은 바보입니다). 여기 내 접근 방식이 있습니다. 다음과 같이 경로에 'grit'(또는 기타)라는 스크립트를 만듭니다.

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

Bash 비전문가와 공유해야 할 경우를 대비하여 읽고 유지하는 것이 매우 간단합니다.


정말로 "git remote blah"가 "git branch blah"를 호출하도록 하시겠습니까? 나는 경로에 git을 더 먼저 넣은 다음 스크립트에서 / usr / bin / git을 명시 적으로 호출하는 변형을 사용하고 있습니다. 네, 아마도 뭔가 깨질 것입니다.
LovesTha 2015-04-22

1
나는 이것을 좋아하고 두 가지 추가 조정을했습니다. 나는 그것을 bash 함수로 만들고 git실제 명령 경로를 얻기 위해 첫 번째 줄을 추가하여 이름을 지정 했습니다 thegit=`/usr/bin/which git`. 그리고 내가 좋아하는 명령 전에 X로 재 지정을 취소 할 수있는 옵션을 추가 git x log ...: if [ "$cmd" = "x" ]; then; $thegit $@.
Joshua Goldberg 2018


0

우리가 사용하는 모든 유틸리티 (svn, maven, git, ...)는 개발자에게 경로에 추가 할 하나의 디렉토리를 제공하기 위해 항상 .bat (Windows의 경우 또는 .sh)에 캡슐화됩니다.

git이 래퍼 스크립트에 캡슐화되어 있으면 모든 것이 가능합니다.

그러나 그것은 Git 자체 또는 git repo에 연결되지 않은 사용자 설정에 연결된 솔루션으로 남아 있습니다.


bash_profile에 별칭을 추가하여 달성 할 수 있어야한다는 뜻입니까?
Jesper Rønn-Jensen

@Jesper : 이것이 바로 아이디어입니다. 래퍼 git.bat가 실행하려는 Git 명령을 감지하고 원하는 옵션을 추가 할 수 있기 때문입니다.
VonC
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.