2012-04-19 14 views
0

私はGitの実際のgit pushコマンドの別名をGitHubにコミットする前にユニットテストのようなものにすることを検討しています。カスタムスクリプトでエイリアスGit pushコマンド

は、ここでプッシュを無視するように思わ.git/

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

の私configファイルです。これは可能ですか?これが不可能な場合は、選択肢がありますか?

答えて

1

エイリアスを作成する代わりに、gitのpre-commitフックを使用します。

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

+0

あなたのお返事ありがとうございます。私はできるだけコミットするのに少しのオーバーヘッドを持つことを好むでしょう。毎回ユニットテストを実行するのは苦痛です。これは、外部の「本番」ブランチにプッシュする場合にのみ実行する必要があります。また、Githubはプリレシーブフックを提供していないので、反対側でそれを打つとどちらも機能しません。 – Matt

+0

'-n'または' --no-verify'を使って、コミット時に 'pre-commit'フックをスキップできます。もちろん、 'commit-msg'フックもスキップします。あなたがしたいこともしたくない場合もあります。常に' -n'を使う習慣があれば、 '-n'を残しておくことを忘れるかもしれません。あなたがチェックしたかったものに。 :-)ここには完璧な解決策はありません。あなたはあなたが暮らすことができる欠点を選ぶだけです。 – torek

1

あなたが原因pushコマンドとの競合にプッシュを別名することはできませんが、「事前プッシュ」フックを使用してみてください可能性があり、詳細については、以下のpatchを参照してください。

別のアプローチは、GitHubでpost-receiveフックを使用して、ユニットテストなどを実行し、変更を承認または拒否する統合サーバーへのPOSTを実行するように設定することです。あなたの設定によっては、それは実用的ではないかもしれません。

+0

Hmm ..これは実際には難しいです - これは実際の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 $? 
}