2012-04-19 2 views
0

GitHub에 커밋하기 전에 단위 테스트와 같은 것을 실행하기 위해 Git에서 실제 git push 명령의 별칭을 찾고 있습니다.사용자 정의 스크립트로 별칭 Git push 명령

여기가 푸시를 무시하는 것 같다 .git/

[alias] 
    push = !echo "custom push" 
    kk = !echo "hi" # => this works... 

config 파일입니다. 이것이 가능한가? 이것이 가능하지 않다면 대안이 있습니까?

답변

1

별칭을 만드는 대신 git의 pre-commit hook을 사용할 것입니다.

http://book.git-scm.com/5_git_hooks.html

+0

답장을 보내 주셔서 감사합니다. 가능한 한 커밋에 약간의 오버 헤드가있는 것을 선호합니다. 매번 단원 테스트를하는 것은 고통입니다. 이것은 외부 "프로덕션"분기로 푸시해야 실행됩니다. 또한 Github은 사전 수신 후크를 제공하지 않으므로 반대쪽에서 수신해도 작동하지 않습니다. – Matt

+0

주어진 커밋에서'-n' 또는'--no-verify'를 사용하여'pre-commit' 후크를 건너 뛸 수 있습니다. 물론'commit-msg' 훅을 건너 뛰고,'-n'을 항상 사용하는 버릇이 생기면'-n'을 남겨 두는 것을 잊어 버릴 수도 있습니다. 당신이 확인하길 원했던 것. :-) 완벽한 솔루션은 없습니다. 당신은 당신이 살 수있는 단점을 골라 내야 만합니다. – torek

1

당신 때문에 푸시 명령을 충돌 푸시 별칭을 할 수는 없지만 "사전 푸시"후크를 사용하여 시도해 볼 수도 있습니다, 자세한 내용은 다음 patch를 참조하십시오.

다른 접근법은 GitHub에서 post-receive 후크를 사용하여 단위 테스트 등을 실행하고 변경 사항을 승인하거나 거부하는 통합 서버에 POST를 수행하도록 구성하는 것입니다. 설정에 따라 실용적이지 않을 수도 있습니다.

+0

흠 .. 이것은 실제로 따라하기가 어렵습니다. 실제 git 라이브러리를 패치하는 것입니까? 나는 그것이 조금 과잉이라고 생각한다. – Matt

+0

예, 그다지 간단하지 않습니다. 어쩌면 'xpush'별칭을 만드는 것이 더 좋은 방법입니다. – BluesRockAddict

1

내가 실행하고 싶었지만 실행하지 않는 git push의 불쾌감을 없애기 위해이 글을 작성했습니다! 네, 이유가 있습니다. (모든 쓰레기를 원격지로 보내면 안됩니다.) 리모컨은 제 GitHub 포크이며, 거기서 쓰레기가 튀어 나옵니다.

이것은 Eugene Kay's .bashrc을 기반으로합니다 (나는 cd을 유지했지만 나를 위해 작동하지 않는 부분은 which git입니다). .bashrc 또는 .zshrc에 다음을 추가하십시오.

function git() { 
    # Path to the `git` binary 
    GIT="/usr/bin/git" 

    # Sanity check 
    if [ ! -f ${GIT} ] 
    then 
    echo "Error: git binary not found" >&2 
    return 255 
    fi 

    # Command to be executed 
    command=$1 

    # Remove command from [email protected] array 
    shift 1 

    # Check command against list of supported commands 
    case $command in 
    "cd") 
    cd $(git rev-parse --show-toplevel)/${1} 
    ;; 
    "push") 
    if [ -z "$1" ] 
    then 
     $GIT push || $GIT push -u origin $($GIT rev-parse --abbrev-ref @) 
    else 
     $GIT ${command} "[email protected]" 
    fi 
    ;; 
    *) 
    # Execute the git binary 
    $GIT ${command} "[email protected]" 
    ;; 
    esac 

    # Return something 
    return $? 
}