공백을 포함하여 git [action] 명령의 별칭을 어떻게 만들 수 있습니까?


29

내 별칭의 대부분은 다음과 같은 형식입니다. alias p='pwd'

나는 별명 싶지 git commit는 않습니다 있도록git commit -v

그러나 공백이있는 별칭을 만들려고하면 오류가 발생합니다.

$ alias 'git commit'='git commit -v'
-bash: alias: `git commit': invalid alias name

답변:


31

질문에 대한 직접적인 대답은 아니지만 (별칭은 한 단어로만 가능하므로) git-config대신 사용해야합니다 .

git config --global alias.civ commit -v

이것은 git 별명을 생성하여 git civ실행됩니다 git commit -v. 불행히도 AFAIK 는 기존 git 명령을 aliases로 재정의하는 방법이 없습니다 . 그러나 항상 적절한 별명을 선택하여 대안으로 사용할 수 있습니다.


에 대한 대답에 추가 노트를 참조 git config하지git-config
마이클 듀런트

이 답변 은 차종이 취소 연결하는 스레드, 이다 기존의 오버라이드 (override) 할 수 git쉘 스크립트의 조금으로, 별칭 명령을. (.! 내가 BTW, 비판 등이 의견을 게시하고 있지 않다 대답은 당신 후 거의 일년을 게시 한 난 그냥 사람들은 도움이 될 수 있다는 희망을 게시하도록하겠습니다.)
sampablokuper

17

공백을 포함하는 명령에 대해 이야기하고 있지만 여기에는 명령이 git있고 공간이 없습니다.

git commit 명령 을 호출하려면 명령을 작성해야합니다.

git\ commit ...
'git commit' ...
"git commit" ...

일반적으로 명령에는 쉘에서 호출하는 것이 번거롭기 때문에 이름에 공백이 없으므로 시스템에서 그러한 명령을 찾을 수 없다고 생각합니다.

csh, tcsh 또는 zsh를 사용하면 위의 것들 중 하나를 별칭으로 지정할 수 있지만 bash 또는 ksh는 사용할 수 없습니다 (pdksh는 허용하지만 사용할 수는 없습니다). zsh에서 :

alias "'git commit'=git commit -v"
'git commit' ...

만들 것 git command(으로 호출 할 때 명령을 'git command'단일 따옴표 () 만 해당)의 별칭을 git와 명령 commit-v인수. 당신이 찾고있는 것이 아니라고 생각합니다.

alias별명 명령 만 할 수 있기 때문에 여기에서 별명을 지정할 수있는 것은 명령 뿐이며 git인수 목록에서 "commit"뒤에 "-v"를 삽입하는 것으로 별명을 지정해야합니다. @ jw013의 솔루션을 사용하는 것이 가장 좋지만 어떤 이유로 인해 별칭을 사용하는 대신 할 수 없거나 사용할 수없는 경우 함수를 사용하여 작업을 수행 할 수 있습니다.

git() {
  if [ "$1" = commit ]; then
    shift
    set -- commit -v "$@"
  fi
  command git "$@"
}

3
공백이나 다른 특수 문자가있는 별명을 허용하는 것은 Bourne 스타일 쉘에 존재하지 않는 csh 기능입니다 (zsh는 이상한 방식으로 에뮬레이트 함). Bourne 스타일 쉘은 첫 번째 단어가 어떤 식 으로든 인용 될 때 별칭 확장을 비활성화 합니다. Renan 's answer를 참조하십시오 .
Gilles 'SO- 악마 그만'

예. 그래서 내가 버그가없는 csh, tcsh 및 zsh에서만 작동한다고 말한 이유입니다. Bourne 쉘은 별명을 지원하지 않습니다. 별칭은 csh에 의해 도입되었습니다.
Stéphane Chazelas

9

Bash에서는 공백이있는 명령의 별명을 작성할 수 없습니다.
그러나 .bashrc에서 다음 함수를 해결 방법으로 사용합니다.

sudo() { if [[ $@ == "pacman -Syu" ]]; then command pacup.sh; else command sudo "$@"; fi; }

작동 방식 : 호출하려는 명령으로 시작합니다. 제 경우에는입니다 sudo.
그런 다음 어떤 매개 변수를 사용할지 언급합니다. 이 경우, pacman -Syu.
트리거 된 경우 어떤 명령을 실행해야합니까? 위의 진술에서 그것은입니다 pacup.sh.
그렇지 않으면 어떤 명령을 실행해야합니까 sudo $@. $@당신이 짐작 하듯이 명령이 취하는 매개 변수 목록입니다.

따라서 특정 사례에 대한 명령을 내리면 다음과 같습니다.

git() { if [[ $1 == "commit" ]]; then command git commit -v; else command git "$@"; fi; }

그러나이 솔루션은 공백이있는 명령의 별명을 지정하려는 경우에보다 일반적인 경우입니다.
특정 경우에는 jw013의 솔루션으로 git 명령의 별칭을 지정하는 것이 좋습니다.git-config


당신은 의미하지 if [[ $1 == 'commit' ]]...않습니까? $ @의 확장은 실제로 유지하려는 커밋에 대한 더 많은 인수를 가질 수 있습니다.
kojiro

권리! 내 나쁜 .. 나는 단순히 내 시스템에 사용하고 있던 진술을 변경했습니다.
darnir

이것은 굉장합니다-감사합니다-그것은 내가 필요한 것에 완벽합니다.
cgseller

4

로부터 bash는 별칭 맨 페이지

인용되지 않은 경우 각 간단한 명령의 첫 단어는 별칭이 있는지 확인합니다. 그렇다면 해당 단어가 별칭의 텍스트로 바뀝니다. 별명과 대체 텍스트는 별명에`= '를 포함 할 수없는 것을 제외하고 쉘 메타 문자를 포함한 유효한 쉘 입력을 포함 할 수 있습니다.

대체 텍스트의 첫 번째 단어는 별칭을 테스트하지만 확장되는 별칭과 동일한 단어는 두 번째로 확장되지 않습니다. 이는 예를 들어 ls를 "ls -F"로 별칭을 지정할 수 있으며 Bash는 대체 텍스트를 재귀 적으로 확장하려고 시도하지 않습니다.

따라서 첫 번째 단어 만 확인되므로 여러 단어로 된 별칭을 가질 수 없습니다. 에서 이 슈퍼 사용자 질문 , 함수를 사용하여 해결 방법이 제공됩니다

ls() { if [[ $@ == "-la" ]]; then command ls -la | more; else command ls "$@"; fi; }

에 적용 할 수 있습니다 git.


당신이주는 그 링크는 내가 가지고있는 bash 문서와 다르며 bash 동작과 모순되는 것 같습니다. 예를 들어 공백은 별칭 이름으로 허용됩니다. 해당 페이지가 명시 적으로 bash라고해도 zsh 동작과 비슷합니다.
Stéphane Chazelas

2
@sch Bourne / POSIX 쉘은 단어가 어떤 식 으로든 인용되면 별칭 확장을 무시합니다. 예를 들어에 \ls대한 별칭을 무시합니다 ls.
Gilles 'SO- 악마 그만'

1
@ 질. Bourne 쉘은 별명을 구현하지 않습니다. POSIX에 따르면 유효한 별칭 이름 (ASCII alnum + 만)과 일치하는 따옴표없는 단어를 [_!%,@]확장해야합니다. zsh의 '\ ls'별칭 또는 ksh / dash / bash / zsh의 별칭과 같은 확장은 금지하지 않습니다. a-b그렇지 않으면 단일 POSIX 셸이 존재하지 않습니다. 쉘이 아닌 이식 가능한 스크립트 는 그러한 별칭을 사용해서는 안된다고 말합니다 .
Stéphane Chazelas

2
@sch POSIX 에서는 구현시 별칭에서 다른 문자를 사용할 수 있지만 단어의 일부를 인용하면 별칭 확장이 금지 됩니다. 'git commit'POSIX 쉘에서 명령 위치에 쓰면 내장 유틸리티, 함수 또는 외부 명령을 호출해야합니다.
Gilles 'SO- 악마 그만'

0

올바른 해결책은 jw013 제안과 같은 별칭을 사용하는 것이지만 공백이있는 별칭을 만들려면 별칭을 NEST 할 수 있습니다.

예를 들어 로컬 및 원격으로 분기를 삭제하는 별칭이 있지만 사용자가 항상 분기를 지정하기를 원합니다.

remrem = "!sh -c 'if [ $# -ne 1 ]; then git specBranch; else git push origin :$1 && git branch -d $1; fi' -"

#echoing aliases
specBranch = "!sh -c 'echo Specify branch please!'" 

-1

에서 예를 들어,이 작업을해야합니다 :

따라서 다른 명령과 함께 sudo를 사용하고 있지만 shutdown과는 달리 sudo를 사용하고 다른 시스템에 shutdown을 적용 할 수 있다면 다음을 수행 할 수 있습니다.

alias sudo='sudo '
alias shutdown="echo nope"

그러나 당신의 명령으로 :

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