[git] git 별칭 안에 bash 스크립트를 직접 포함하는 방법

다음 bash 쉘 코드를 임베드 할 수 있습니까?

for name in $(git diff --name-only $1); do git difftool $1 $name & done

git 별칭 생성에 직접 추가 :

git config --global alias.diffall ***my-bash-code-here***

이것은 이전 질문 / 답변 으로 이어지며 코드를 .sh 파일에 넣은 다음 파일에 별칭을 지정합니다.

git config --global alias.diffall '!sh diffall.sh'

그러나 단순성을위한 끝없는 탐구에서 파일을 건너 뛰고 별칭에 직접 코드를 삽입하는 방법이 있어야합니까? 형식을 알 수 없습니다 …



답변

git config --global alias.diffall '!sh diffall.sh'

이것은 한 가지 방식으로 중복됩니다. 어쨌든 $ PATH에 ‘diffall.sh’를 추가하려면 ‘git-diffall’로 저장하고 별칭을 선언하지 않도록하십시오. 예, “git diffall”이 실행합니다.


답변

git 별칭 내에서 명령을 실행하고 특히 해당 명령에 인수를 전달하려면 즉시 호출하는 임시 함수를 만들어야합니다.

$ vim ~/.gitconfig
...
[alias]
    # compare:
    foo = "! echo begin arg=$1/$2/end"
    foo2 = "!f() { echo "begin arg=$1/$2/end"; }; f"

이 예제에서 함수는 아마도 여러분이 필요로하는 것일 것입니다 (또한 단일 “문”에서 할 수있는 것에 대해 더 유연합니다). 두 옵션 모두에 대해 git 명령의 나머지 인수는 “echo”또는 “f”인지 여부에 관계없이 별칭에 args로 전달된다는 것을 알 수 있습니다. 함수를 호출하는 것은 명시 적으로 사용되지 않는 것은 무시하고 단순히 args를 소비합니다.

$ git foo a b c
begin arg=a/b/end a b c

$ git foo2 a b c
begin arg=a/b/end

또 다른 예 (일치하는 패턴에 따라 모든 별칭 나열) (참고 : .gitconfig 전체에서 동일한 함수 이름 “f ()”를 계속 재사용 할 수 있음) :

[alias]
    alias = "!f() { git config --get-regexp "^alias.${1}$" ; }; f"

첫 번째는 “foo $”에 대한 별칭을 반환하고 두 번째는 “foo. *”에 대한 별칭을 반환합니다.

$ git alias foo
alias.foo ! echo begin arg=$1/$2/end

$ git alias 'foo.*'
alias.foo ! echo begin arg=$1/$2/end
alias.foo2 !f() { echo begin arg=$1/$2/end; }; f

(nb : 실제 결과는 쉘에 따라 다를 수 있습니다. Linux, Unix 및 Cygwin (Windows)에서 bash와 함께 사용하고 있습니다.)


답변

문서에서 찾을 수 없지만 경로에 “git- <name>”스크립트를 생성하면 저장소에서 “git name”으로 호출 할 수 있습니다.

보다:

$ cd ~/bin
$ echo "echo I love this log:
>pwd
>git log --graph  --summary --decorate --all" > git-logg
$ chmod +x git-logg
$ cd /path/to/your/repo
$ git logg
I love this log:
/path/to/your/repo
* commit 3c94be44e4119228cc681fc7e11e553c4e77ad04 (whatever-branch)
| Author: myself <my@Laptop.(none)>
| Date:   Fri Apr 1 16:47:20 2011 +0200
|
|     would have been better not to do it at all
|
...
$

따라서이 방식으로 원하는 별칭을 작성할 수도 있습니다.

또한 함수를 정의하는 새 명령에 자동 완성 기능을 추가 할 수 있습니다. 여기에 정보

$ _git_logg ()
{
  # you can return anything here for the autocompletion for example all the branches
  __gitcomp_nl "$(__git_refs)"
}


답변

이 두 줄을 .git / config 파일에 추가하면 트릭을 수행 할 수 있습니다.

[alias]
    diffall = '!for name in $(git diff --name-only $1); do git difftool $1 $name & done'

편집 : 아마도 git-config 버전도 작동하지만 관리하기 쉽도록 구성 파일에 별칭을 유지하고 싶습니다.

git wiki에 별칭을 매우 명확하게 설명하는 멋진 페이지가 있습니다. http://git.or.cz/gitwiki/Aliases 특히 ‘인수가있는 고급 별칭’을 읽어보세요.


답변

(ProGit 문서에서 : http://progit.org/book/ch7-3.html )

.git / hooks에 스크립트를 추가해 보셨나요?

예를 들어 .git / hooks / post-checkout 스크립트를 생성하는 경우 :

#!/bin/bash

echo "This is run after a 'git checkout'"

그런 다음 다음 명령을 실행하십시오.

$ git checkout master
Switched to branch 'master'
This is run after a 'git checkout'


답변