programing

Git 별칭 - 여러 명령 및 매개 변수

newsource 2023. 7. 4. 21:56

Git 별칭 - 여러 명령 및 매개 변수

여러 Git 명령과 위치 매개 변수를 모두 사용하는 별칭을 만들려고 합니다.각각의 스택 오버플로 페이지가 있고, 두 가지 모두를 수행하는 것은 고통스러울 정도로 명백해 보이지만, 저는 어려움을 겪고 있습니다.

예를 들어 지점 foo로 전환하여 상태를 수행하고자 합니다.그래서 내 안에서.gitconfig소유자:

  [alias] 
     chs = !sh -c 'git checkout $0 && git status'

효과가 없는 거죠반면에 이와 같은 것은 효과가 있을 것입니다.

chs = !sh -c 'git checkout $0'

echoes = !sh -c 'echo hi && echo bye'

어떤 식으로든 의견을 주시면 감사하겠습니다.

이것은 작동합니다(zsh 및 bash로 테스트됨).

[alias] chs = !git checkout $1 && git status

이는 윈도우즈 배치/msysgit bash를 대상으로 하며, 다른 환경에서는 작동하지 않을 수 있습니다.

올리비에 베르디에와 릴리 발라드가 말했듯이,

[alias] chs = !git checkout $1 && git status

거의 효과가 있지만, ...라는 주장을 거짓으로 추가적으로 삽입합니다.

git chs demo -> git checkout demo && git status demo

하지만 당신이 추가한다면,&& :그런 다음 거짓 인수가 위치 태그로 사용됩니다.

그렇게

[alias] chs = !git checkout $1 && git status && :

올바른 출력을 제공합니다... git chs demo -> git checkout demo && git status

셸 함수를 정의할 수 있습니다.

[alias] chs = "!f(){ git checkout \"$1\" && git status; };f"

저는 여러 줄로 된 꽤 복잡한 Git 별칭을 만들 수 있었습니다.Windows에서 잘 작동하지만 다른 곳에서도 작동할 것으로 예상됩니다. 예를 들어 다음과 같습니다.

safereset = "!f() { \
                trap 'echo ERROR: Operation failed; return' ERR; \
                echo Making sure there are no changes...; \
                last_status=$(git status --porcelain);\
                if [[ $last_status != \"\" ]]; then\
                    echo There are dirty files:;\
                    echo \"$last_status\";\
                    echo;\
                    echo -n \"Enter Y if you would like to DISCARD these changes or W to commit them as WIP: \";\
                    read dirty_operation;\
                    if [ \"$dirty_operation\" == \"Y\" ]; then \
                        echo Resetting...;\
                        git reset --hard;\
                    elif [ \"$dirty_operation\" == \"W\" ]; then\
                        echo Comitting WIP...;\
                        git commit -a --message='WIP' > /dev/null && echo WIP Comitted;\
                    else\
                        echo Operation cancelled;\
                        exit 1;\
                    fi;\
                fi;\
            }; \
            f"

제가 글을 썼고 여기에 몇 가지 사례가 더 있습니다.

[alias]
chs = !git branch && git status
[alias]
      chs = !git checkout && git status
      ac = !git add . && git commit -m 

뭐가!?

별칭 확장 앞에 느낌표가 있으면 셸 명령으로 처리됩니다.느낌표는 git 구성 별칭을 의미합니까?

.gitconfig 파일에서 별칭을 호출하려면 다음과 같이 하십시오.

git chs
git ac "write_your_commit_message" 

별칭은 더 빨리 할 수 있는 추가 및 커밋에 더 유용합니다.

사용해 보십시오.

[alias]
    chs = "!sh -c 'git checkout \"$0\" && git status'"

: 다과같이부릅다니음다.git chs master

추가하여 여러 줄의 Git 별칭을 가질 수 있습니다.\각 행의 끝에

[alias] 
   chs = "!git checkout $1 \ 
          ; git status     \
         "

여기서 문제는 위치 매개 변수가 셸 명령으로 두 번 전송되는 것처럼 보인다는 것입니다(git 1.9.2 기준).내 뜻을 보려면 다음을 시도하십시오.

[alias]
  test = !git echo $*

그럼, 하시오git test this is my testing string다음 출력을 확인해야 합니다(마지막 두 줄은 명확하게 하기 위해 여기서 편집).

03:41:24 (release) ~/Projects/iOS$ git test this is my testing string
this is my testing string this is my testing string
^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^
          #1                         #2

이 문제를 해결하는 한 가지 방법은

[alias]
  chs = !git checkout $1 && git status && git echo x >/dev/null

마지막 에코 명령에 적용될 때 추가 위치 매개 변수가 사용되며 결과에는 영향을 주지 않습니다.

다른 별칭이 수행하는 작업을 시도하려는 사용자를 위한 예제입니다.

에 저장( GIT 구의별 예이입를력합다니에션섹칭의성일파):~/.gitconfig) :

[alias]
    a0 = "!echo $*"
    a1 = "!echo $* #"
    a2 = "!f () { echo \"$*\"; }; f "
    a3 = "!f () { echo \"$*\"; }; f #"
    a4 = "!f () { echo \"$*\"; }; f \"$*\" #"
    a5 = "!f () { echo \"$*\"; }; f \"$@\" #"
    a6 = "!f () { echo \"$*\"; }; f \"$1\" #"

다음 명령을 실행합니다.

cat ~/.gitconfig | grep --extended-regexp -- '(a[0-9])|(alias)' ; \
echo "" ; \
export CMD ; \
for I in {0..6} ; \
do \
    CMD="a""${I}" ; \
    echo -n "Executing alias.${CMD} = " ; \
    git config --global alias."${CMD}" ; \
    git $CMD 'hoi daar' en nu ; \
    git $CMD hoi daar en nu ; \
    echo "" ; \
done ; \
unset CMD ;

출력으로 제공해야 합니다.

[alias]
    a0 = "!echo $*"
    a1 = "!echo $* #"
    a2 = "!f () { echo \"$*\"; }; f "
    a3 = "!f () { echo \"$*\"; }; f #"
    a4 = "!f () { echo \"$*\"; }; f \"$*\" #"
    a5 = "!f () { echo \"$*\"; }; f \"$@\" #"
    a6 = "!f () { echo \"$*\"; }; f \"$1\" #"

Executing alias.a0 = !echo $*
hoi daar en nu hoi daar en nu
hoi daar en nu hoi daar en nu

Executing alias.a1 = !echo $* #
hoi daar en nu
hoi daar en nu

Executing alias.a2 = !f () { echo "$*"; }; f 
hoi daar en nu
hoi daar en nu

Executing alias.a3 = !f () { echo "$*"; }; f #



Executing alias.a4 = !f () { echo "$*"; }; f "$*" #
hoi daar en nu
hoi daar en nu

Executing alias.a5 = !f () { echo "$*"; }; f "$@" #
hoi daar en nu
hoi daar en nu

Executing alias.a6 = !f () { echo "$*"; }; f "$1" #
hoi daar
hoi

이것은 오래된 게시물이지만, 아무도 제가 생각하는 가장 간단한 해결책을 제공하지 않았습니다.이 기능은 *nix 기반 CLI에서 사용할 수 있으며, 마일리지는 달라질 수 있습니다.

[alias]
    chs = "!git checkout $1; git status"

여러 Git 명령을 실행하는 데 필요한 것은 간단한 세미콜론(;)뿐입니다.

릴리 발라드가 셸 함수와 함께 좋은 답을 가지고 있는 한, 모든 별칭 인수를 파이프로 연결할 때 더 좋아 보입니다.

[alias] chs = "!f(){ git checkout \"${@:1}\" && git status; };f"

언급URL : https://stackoverflow.com/questions/7534184/git-alias-multiple-commands-and-parameters