[git] 힘내 별칭-여러 명령 및 매개 변수

여러 Git 명령과 위치 매개 변수를 모두 사용하는 별칭을 만들려고합니다. 각 페이지마다 Stackoverflow 페이지가 있으며 두 가지를 모두 수행하는 것이 고통스럽게 보이지만 문제가 있습니다.

예를 들어, 분기 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


답변

이것은 Windows 배치 / 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 = "!sh -c 'git checkout \"$0\" && git status'"

다음과 같이 호출하십시오. git chs master


답변

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

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