힘내 별명 나열


444

내 자식 별칭 목록, 즉 bash alias명령 과 유사한 것을 어떻게 인쇄 합니까?



7
@MattDiPasquale-아래 최고의 답변이 효과가 있다고 생각합니다.
domoarigato '12

@domoarigato 감사합니다. 답변을받지 못해 죄송합니다. 방금 했어요
ma11hew28

P : 그것은 허용되는 응답 : 긴없이왔다 유용한 질문에 대한 후보가 될 수있다
domoarigato

@domoarigato Hah. 고마워 :-)
ma11hew28

답변:


125

이 답변은 johnny답변 을 기반으로합니다 . from을 사용하지 않는 경우에 적용됩니다 .git-aliasgit-extras

Linux에서 한 번 실행하십시오.

git config --global alias.alias "! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /"

그러면 파일에 alias저장되는 영구 git 별칭이 생성 ~/.gitconfig됩니다. 그것을 사용하면 모든 git 별칭이 ~/.gitconfig파일 과 거의 같은 형식으로 나열 됩니다. 사용하려면 다음을 입력하십시오.

$ git alias
loga = log --graph --decorate --name-status --all
alias = ! git config --get-regexp ^alias\. | sed -e s/^alias\.// -e s/\ /\ =\ /

다음 고려 사항이 적용됩니다.

  • alias위와 같이 별칭 이 표시 되지 않도록하려면 | grep -v ^'alias '큰 따옴표를 닫기 직전 에 추가하십시오 . 사용자가 명령 alias이 별명이고 git의 기능이 아니라는 것을 잊지 않도록 권장하지 않습니다 .

  • 나열된 별칭을 정렬하려면 | sort닫는 큰 따옴표 바로 앞에 추가하십시오 . 또는 별칭을 ~/.gitconfig정렬 하여 유지할 수 있습니다 .

  • 별명을 시스템 전체 별명으로 추가하려면 --global(현재 사용자의 경우)를 --system(모든 사용자의 경우)로 바꾸십시오 . 이것은 일반적으로 /etc/gitconfig파일 에 들어갑니다 .


3
alias.각 줄의 시작 부분에서를 제거하기 때문에 나는 이것을 좋아합니다
Brian J

3
왜 그런지 모르겠지만이 답변이 효과가 없습니다. 나는 계속 받고있다 fatal: bad config. 힘내-별도의 솔루션은하지만 나를 위해 작업을 수행합니다 github.com/tj/git-extras/blob/master/bin/git-alias을
아시타카

1
@Ashitaka, 예를 들어 제한된 버전을 사용해보십시오 git config --global alias.alias "! git config --get-regexp ^alias\.". 또는 git version현재 버전의 git이 있는지 확인하십시오 .
Acumenus

이것은 정말 대단한 일이며 매우 유용하게 사용할 수 있습니다!
UpAndAdam

기본적으로 서로를 취소하는 "! git"부분을 제거 할 수 있다고 생각합니다. Git Aliases
Daniel Stevens

489
$ git config --get-regexp 별칭

39
놀랍게도, 그것은'^alias\.'
Josh Lee

27
아니면 그냥 git config -e눈을 사용하여 [alias]섹션 을 찾으십시오 . 그러나 자식 팬은 항상 필요하지 않은 경우에도 문제를 해결하기 위해 약간의 bash 스크립팅이나 정규 표현식 일치를 던지는 것처럼 보입니다.)
MatrixFrog

39
git config -e.git/config파일 만 편집합니다 . 그러나 대부분의 별칭은 전역에 정의되어 ~/.gitconfig있습니다.
Boldewyn

21
실용적이 되려면 git config --global alias.aliases config --get-regexp '^alias\.'"... 그리고 그 다음에git aliases
Derek Greer

6
@DerekGreer 당신이 "어딘가에 빠져 있습니다
Jake Berger

147

나는 alias정확하게이 목적을 위해 (이상하게 충분한) git 별칭을 만들었습니다 ... 별칭을 충분히 사용하면 때때로 편리합니다 ...

$ git config --global alias.alias "config --get-regexp ^alias\."

정규식은 줄이로 시작하는지 확인하십시오 alias..


이 답변에 약간 기반을 둔 답변 을 추가했습니다 .
Acumenus

1
이와 같은 --system대신 --global사용자 수준이 아닌 시스템 수준에서 더 유용하다고 제안 합니다.
ADTC

1
이거 너무 좋아. 당신 다 당신 다 최고
Charles Watson

2
그리고 gitconfig에 직접 추가하려면 다음과 같아야합니다 alias = config --get-regexp ^alias\\..
marczych

어때git config --global alias.alias "!git config --get-regexp ^alias\. | grep -Po '(?<=alias\.)\S*' | sort"
Keith Robertson

84

다른 대안 (순전히 기억하기 쉬운 것) :

git config --list | grep alias


8
기억하기 쉽다고 하면 alias별칭을 한 번 만든 다음 생성 한 것을 잊어 버릴 수도 있습니다.
Acumenus

3
-l편리한 바로 가기로 사용할 수 --list있지만 별칭을 만들기 위해 별칭을 만드는 아이디어가 마음에 듭니다.
ADTC

1
좋은 해결책이지만 정규식과 함께 grep을 사용하여 키워드 별칭이 포함 된 경우 별칭으로 시작하는 줄을 만드는 것이 좋습니다.git config --list | grep -E '^alias'
MasterMind

28

다음은 Linux, MacOSX 및 Windows (msysgit 사용)에서 작동합니다.

git la 를 사용 하여 .gitconfig에 별칭을 표시 하십시오.

'bash scripting'이 들렸습니까? ;)

위의 주석에서 '필요하지 않은'부분에 대해 기본적으로 내 별칭에 대한 개요와 같은 맨 페이지를 만들었습니다. 왜 모든 소란? 완전한 오버 킬 아닌가요?

읽어...

.gitconfig에서 다음과 같이 구분하여 다음과 같은 명령을 설정했습니다 TAB=TAB.

[alias]
        alias1            =            foo -x -y --z-option
        alias2            =            bar -y --z-option --set-something

TAB=정의 된 별칭 의 일부 를 grep하기 위해 다른 별칭을 정의했습니다. (다른 모든 옵션은 정의에서 '='앞뒤에 탭이없고 공백 만 있습니다.)

별명에 추가되지 않은 주석도 추가 TAB=====되었으므로 Grepping 후에 표시됩니다.

더 잘 볼 수 있도록 grep 출력을 다음과 같이 줄입니다.

기본 버전 : (흑백)

  #.gitconfig
  [alias]
        # use 'git h <command>' for help, use 'git la' to list aliases  =====
        h     =     help #... <git-command-in-question>
        la    =     "!grep '\t=' ~/.gitconfig | less" 

' \t='부분이 일치 TAB=합니다.

내가 가진 별칭에 대해 더 잘 개요하고 bash 콘솔을 사용하기 때문에 출력을 터미널 색상으로 채색했습니다.

  • 모든 '='는 빨간색으로 인쇄됩니다
  • 모든 '#'은 녹색으로 인쇄됩니다

고급 버전 : (컬러)

       la      =       "!grep '\t=' ~/.gitconfig | sed -e 's/=/^[[0;31m=^[[0m/g' | sed -e 's/#.*/^[[0;32m&^[[0m/g' | less -R"

기본적으로 위와 동일하며 색상 코드를 출력으로 가져 오기 위해 sed 사용법 만 추가됩니다.

less 로 표시된 색상을 얻으려면 less-R플래그 가 필요합니다.

(최근에 창 아래에 스크롤 막대가있는 긴 명령이 모바일 장치에서 올바르게 표시되지 않는다는 것을 알았습니다. 텍스트가 잘리고 스크롤 막대가 누락되었습니다. 마지막 코드 스 니펫이있는 경우에는 이동 중에도 코드 스 니펫을 볼 때주의하십시오.)


왜 그런 마술이 효과가 있습니까?

나는 나의 필요에 맞춘 0.5 마일의 별칭을 가지고있다.
또한 일부는 시간이 지남 에 따라 변경 되므로 최신 목록을 사용하는 것이 가장 좋습니다 ..gitconfig를 구문 분석하는 것입니다.

내 .gitconfig 별명에서 *********** 발췌 :

    #  choose       =====
    a       =       add #...
    aa      =       add .
    ai      =       add -i
    #  unchoose     =====
    rm      =       rm -r #... unversion and delete
    rmc     =       rm -r --cached #... unversion, but leave in working copy
    #  do   =====
    c       =       commit -m #...
    fc      =       commit -am "fastcommit"
    ca      =       commit -am #...
    mc      =       commit # think 'message-commit'
    mca     =       commit -a
    cam     =       commit --amend -C HEAD # update last commit
    #  undo =====
    r       =       reset --hard HEAD
    rv      =       revert HEAD

내 리눅스 또는 맥 워크 스테이션에서도 .bashrc에 추가 별칭이 있습니다.

#.bashrc
alias g="git"
alias gh="git h"
alias gla="git la"
function gc { git c "$*" } # this is handy, just type 'gc this is my commitmessage' at prompt

필요 입력하지 않으려면 그 방법 git help submodule에 대한 필요는 git h submodule단지 gh submodule도움을 얻기 위해 필요한 모든 것입니다. 그것은 단지 일부 문자이지만 얼마나 자주 입력합니까?

물론 다음과 같은 모든 것을 바로 가기와 함께 사용합니다 ...

  • 더하다
  • 범하다
  • 커밋-수정
  • 재설정-하드 헤드
  • 푸시
  • 술책
  • 리베이스
  • 점검
  • 분기
  • show-branch (다양한 변형)
  • 지체
  • 거절하다
  • 차이 (변형)
  • 로그 (많은 변형)
  • 상태
  • 보여 주다
  • 노트
  • ...

이것은 단지 내 머리 꼭대기에서 있었다.

많은 git 명령이 그래픽 프론트 엔드에서 제대로 구현되지 않기 때문에 종종 GUI없이 git을 사용해야합니다. 그러나 내가 사용하도록 할 때마다 대부분 같은 방식입니다.

마지막 단락에서 언급 된 '구현되지 않은'부분에 대해서는
아직 GUI에서 이것과 비교할만한 것을 찾지 못했습니다
sba = show-branch --color=always -a --more=10 --no-name.- 모든 로컬 및 원격 브랜치와 그 안에있는
ccm = "!git reset --soft HEAD~ && git commit"커밋을 표시하십시오-마지막 커밋 메시지 변경

더 간단한 관점에서 :
얼마나 자주 git add .또는 git commit -am "..."? ... 심지어 나머지를 계산하지 않음
등의 작업에 일을 얻기 git aa또는 git ca "..."창에서,
또는 bash는 별칭과 gaa/ g aa또는 gca "..."/ g ca "..."리눅스 및 맥의에 ...

내 필요에 따라이 같은 git 명령을 조정하는 것이 현명한 것처럼 보였습니다 ...
... 더 쉽게 사용하기 위해 덜 사용되는 명령에 대해 저 자신을 도왔습니다. 매번 맨 페이지를 참조하지 않아도됩니다. 명령은 사전 정의되어 있으며 가능한 한 쉽게 찾을 수 있습니다.

결국 우리는 프로그래머입니까? 필요에 따라 작업을 수행하는 것이 우리의 일입니다.

추가 스크린 샷은 다음과 같습니다. Windows에서 작동합니다.

cmd.exe로 작업하는 스크립트

보너스 : Linux 또는 Mac을 사용하는 경우 색상이 지정된 매뉴얼 페이지가 도움이 될 수 있습니다.

채색 된 매뉴얼 페이지


1
Windows에서 작동하도록 할 수 없습니다. 출력은 예를 들어 비어 있습니다la = "!grep '\t=' ~/.gitconfig | less"
chwi

1
@ Wilhelmsen : 위 목록에서 복사하여 붙여 넣었습니까? 당신은 정말로 TAB모든 선행을 가지고 =있습니까? 공백이 있으면 작동하지 않습니다. 내 창에 공백이 있었다 .gitconfig나는 하나의 탭 위치로 교체하면, 자신을, cmd.exe를 동작합니다 예상 좋아합니다.
sjas

2
오버 엔지니어링
무기 X

사용 빈도에 따라 다릅니다.
sjas

16

다음으로 git var시작하는 항목 만 사용 하고 필터링하십시오 alias.

git var -l | grep -e "^alias"

14

다른 답변에서 언급했듯이 git config -l구성 파일의 모든 구성 세부 정보가 나열됩니다. 다음은 내 구성에 대한 출력의 일부 예입니다.

...
alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E
core.repositoryformatversion=0
core.filemode=false
core.bare=false
...

따라서 다음을 사용하여 별칭 줄을 그립니다 git config -l | grep alias.

alias.force=push -f
alias.wd=diff --color-words
alias.shove=push -f
alias.gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
alias.branches=!git remote show origin | grep \w*\s*(new^|tracked) -E

우리는 각 줄 cutalias.일부만 빼면 이 명령을 내릴 수 있습니다.

git config -l | grep alias | cut -c 7-

어떤 지문 :

force=push -f
wd=diff --color-words
shove=push -f
gitignore=!git ls-files -i --exclude-from=.gitignore | xargs git rm --cached
branches=!git remote show origin | grep \w*\s*(new^|tracked) -E

마지막으로 이것을 별명으로 추가하는 것을 잊지 마십시오 :

git config --global alias.la "!git config -l | grep alias | cut -c 7-"

즐겨!



12

나는 carej그의 답변에 보고 하는 " 개요 목록-가장 많이 사용되는 git 명령 "Git 2.18 "사용 --list-cmds=alias( 커밋 3301d36 )"으로 2018 년 6 월에 언급했습니다 .

 git --list-cmds=alias

그 중 또는의 외에도 출력을 Git 2.14.x / 2.15로 변경하는 출력을와 git config --get-regexp alias결합 할 수 있습니다 git help.

" git help co"는 " co is aliased to ..."가 아니라 " git co is" 라고 말합니다 .

Kaartic Sivaraam ( )의 commit b3a8076 (2017 년 9 월 12 일)을 참조하십시오 . ( Junoio C Hamano의해 합병 -- 커밋 5079cc8 , 2017 년 9 월 25 일)sivaraam
gitster

help:보다 정확한 메시지 변경

사용자가 --help별명 명령에 대해 ' '옵션 을 사용하려고 하면 별명에 대한 정보가 다음과 같이 인쇄됩니다.

$ git co --help
`git co' is aliased to `checkout'

사용자가 ' co'이 아닌 ' git co'의 별칭 만 지정했기 때문에 올바르지 않습니다 .
사용자가 ' tgit' 와 같은 별칭을 사용한 경우에는 올바르지 않을 수도 있습니다 .

$ tgit co --help
`git co' is aliased to `checkout'

9

모든 별칭 검색 또는 표시

.gitconfig아래에 추가 [alias]:

aliases = !git config --list | grep ^alias\\. | cut -c 7- | grep -Ei --color \"$1\" "#"

그럼 넌 할 수있어

  • git aliases -모든 별칭 표시
  • git aliases commit - "커밋"을 포함하는 별칭 만

9

전 세계 에서이 별칭 을 사용 합니다~/.gitconfig

# ~/.gitconfig

[alias]
    aliases = !git config --get-regexp ^alias\\. | sed -e s/^alias.// -e s/\\ /\\ $(printf \"\\043\")--\\>\\ / | column -t -s $(printf \"\\043\") | sort -k 1

다음과 같은 출력 을 생성

$ git aliases
aliases   --> !git config --get-regexp ^alias\. | sed -e s/^alias.// -e s/\ /\ $(printf "\043")--\>\ / | column -t -s $(printf "\043") | sort -k 1
ci        --> commit -v
cim       --> commit -m
co        --> checkout
logg      --> log --graph --decorate --oneline
pl        --> pull
st        --> status
...       --> ...

( 참고 : 이것은 Windows의 git bash 에서 작동합니다 . 다른 터미널의 경우 이스케이프를 조정해야 할 수도 있습니다. )


설명

  1. !git config --get-regexp ^alias\\. git config에서 모든 줄을 인쇄합니다. alias.
  2. sed -e s/^alias.//alias.라인에서 제거
  3. sed -e s/\\ /\\ $(printf \"\\043\")--\\>\\ /공백의 첫 번째 발생을 \\ $(printf \"\\043\")--\\>(로 평가됨 #-->)으로 바꿉니다 .
  4. column -t -s $(printf \"\\043\")모든 행을 균일 한 간격의 열 테이블로 형식화합니다. $(printf \"\\043\")평가 되는 문자 #는 구분 기호로 사용됩니다.
  5. sort -k 1 첫 번째 열의 값을 기준으로 모든 줄을 정렬합니다

$ (printf \ "\ 043 \")

#열 분리에 사용되는 문자 (16 진 043) 만 인쇄합니다 . 이 작은 핵을 사용하여 aliases 별칭 자체에 문자가 포함되어 있지 않습니다 #. 그렇지 않으면 #인쇄시 해당 문자를 대체합니다 . 참고 : 리터럴 #기호 가있는 별명이 필요한 경우이를 다른 문자로 변경하십시오 .


치명적인 : 재귀 별칭 : 별칭
Urasquirrel

치명적 : 파일 C : / Users / ____ /. gitconfig의 잘못된 구성 행 15
Urasquirrel

@Urasquirrel : 어떤 OS에서 문제가 있습니까? 이것은 Windows의 git bash 및 Mac OS X의 bash (Apple Git)에서 작동합니다.
토마스

가장 확실하게 창문 이었지만 1 년 이상 후에는 100 % 확신 할 수 없습니다.
Urasquirrel

2

내장 기능이 있습니다 ... 시도

$ __git_aliases

모든 별칭을 나열합니다 :)


3
샘플 출력과 함께 이것을 사용하는 방법에 대한 명령 행 예제를 보여줄 수 있습니까?
Acumenus

무엇에 내장되어 있습니까? msysgit에서 이런 종류의 것을 찾을 수 없습니다. 정확히 어디서 찾았습니까?
ADTC

2
이것을 터미널에서 직접 호출하거나 git에 대한 인수로 호출하면 값 출력이 생성되지 않습니다. 이것이 정확히 무엇에 내장되어 있습니까?
동의 적으로 ascyphous

4
git bash에서 나를 위해 일했습니다. $ __git_aliases는 별명 목록을 반환하지만 별명을 표시하지는 않습니다.
jaypb

1
@ADTC이 답변의 코드 줄 명령 줄 예입니다. 는 $ 전형적인 리눅스 터미널 프롬프트이다. 이 줄의 나머지 부분을 터미널에 입력하면 ENTER별칭 목록이 나타납니다. git에 내장되어 있기 때문에 Linux와 Windows (git bash) 모두에서 작동합니다 . (아마도 git이 명령 행에서 사용될 때 별칭을 내부적으로 사용하는 함수일 것입니다.)
Superole

1

별명 이름을 알고 있으면 --help옵션을 사용하여 별명 을 설명 할 수 있습니다 . 예를 들면 다음과 같습니다.

$ git sa --help
`git sa' is aliased to `stash'

$ git a --help
`git a' is aliased to `add'

1

자식 2.18부터는 사용할 수 있습니다 git --list-cmds=alias


내용이 아닌 별칭 cmd 만 반환합니다. 그것을 얻을 수있는 옵션이 있습니까?
Carles Alcolea

0

자식 별칭을 출력하는 또 다른 git별칭 ( alias)은 gitconfig [alias]섹션에 다음을 추가 하십시오.

[alias]
    # lists aliases matching a regular expression
    alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"

전체 별칭 이름 (별칭 이름과 정확히 일치하는 즉, ^foobar$)을 제공하는 사용법 예 : 값을 간단히 표시

$ git alias st
alias.st status -s

$ git alias dif
alias.dif diff

또는 일치하는 모든 별칭 및 값을 표시하는 regexp를 제공하십시오.

$ git alias 'dif.*'
alias.dif diff
alias.difs diff --staged
alias.difh diff HEAD
alias.difr diff @{u}
alias.difl diff --name-only

$ git alias '.*ing'
alias.incoming !git remote update -p; git log ..@{u}
alias.outgoing log @{u}..

주의 사항 : 파일이 패턴과 일치하지 않는 경우 / 기술적으로 필요하지 않지만 쉘 확장을 방지하기 위해 정규 표현식을 인용하십시오. 또한 : ^(패턴 시작) 및 $(패턴 끝)을 사용할 수 없다는 점을 제외하고는 정규 표현식이 좋습니다 . 그들은 내포되어 있습니다. git-aliasfrom을 사용하지 않는 것으로 가정합니다 git-extras.

또한 별명은 분명히 다릅니다. 이것들은 내가 구성한 몇 가지입니다. (아마도 유용 할 것입니다.)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.