gitでコミットした後に自動的にプッシュする方法は?

ローカルリポジトリにコミットするたびに自動的にリモートレポ(パスフレーズを自動的に提供することを含む)にプッシュするようにgitを設定するにはどうすればよいですか?

60
どんなプロトコルを押していますか?パスワードの入力を求められたら、これはSSHかHTTPのどちらかと仮定します。
追加された 著者 Mark Longair,
また、gitの質問では、使用しているオペレーティングシステムについて少なくとも言及することが常に役立ちます。
追加された 著者 Mark Longair,
私はそのような設定の知恵に疑問を呈します。これにより、変更内容を異なるコミットセット(特にリベース)に再編成する機能が削除されます。私はこのような設定のために、あまりにも多くの間違いを犯して、私にとって有益なものになってしまう。
追加された 著者 jpmc26,

5 答え

まず、パスワードを入力せずに手動でプッシュできることを確認します。 HTTPまたはHTTPSをプッシュしている場合は、ログインの詳細または秘密鍵をキャッシュするには ssh-agent を使用します

次に、以下を含む .git/hooks/post-commit にファイルを作成する必要があります。

#!/bin/sh
git push origin master

... origin 以外のリモートにプッシュする場合や、 master 以外のブランチをプッシュする場合は、その行をカスタマイズしてください。そのファイルを実行可能にすることを確認してください。

110
追加された
ssh-agentにパスフレーズを記憶させることができなかったので、それを空にしなければなりませんでした。私の妻が私のアカウントをハックしないことを願って:)
追加された 著者 ulu,
git push - すべての元
追加された 著者 Yada,
カスタマイゼーションといえば、このようにすべてのブランチではなく一部をプッシュしたいのですが?たとえば、 .git/config に記載されている対応するリモートブランチを持つブランチのみを feature/xy/のプレフィックスで自動プッシュしたいとします。
追加された 著者 A-B-B,
chmod + x .git/hooks/post-commit
追加された 著者 UnchartedWorks,

それ以上のmasterブランチを使用し始める場合、現在のブランチを自動的にプッシュしたいかもしれません。私のフック( .git/hooks/post-commit )は次のようになります:

#!/usr/bin/env bash

branch_name=`git symbolic-ref --short HEAD` 
retcode=$?
non_push_suffix="_local"


# Only push if branch_name was found (my be empty if in detached head state)
if [ $retcode = 0 ] ; then
    #Only push if branch_name does not end with the non-push suffix
    if [[ $branch_name != *$non_push_suffix ]] ; then
        echo
        echo "**** Pushing current branch $branch_name to origin [i4h_mobiles post-commit hook]"
        echo
        git push origin $branch_name;
    fi
fi

git symbolic-refでブランチ名を判断できる場合は、現在のブランチをプッシュします。

" Gitで現在のブランチ名を取得する方法これと他の方法で現在のブランチ名を取得します。

あるブランチの自動プッシュは、いくつかのソーセージ作成起こる(あなたが押した後に簡単に転倒することはできない)。したがって、フックは定義された接尾辞で終わるブランチをプッシュしません(この例では "_local")。

23
追加された
最初の行は、#!/ bin/sh を使って動作させる必要がありました。さもなければ、エラー:.git/hooks/post-commitを実行できません:そのようなファイルやディレクトリはありません。ありがとう、私はあなたのソリューションが一番好きです。
追加された 著者 oyalhi,
コメントありがとう、@oyalhi、私は答えでシバンの行を更新しました。それは今より良いはずです!
追加された 著者 i4h,

.git/hooksディレクトリに "post-commit"という名前のファイルを "git push"という内容で作成しますが、自動的にパスワードを提供したい場合は変更が必要です。

8
追加された
私はあなたのためにそれをやった。
追加された 著者 ulu,
私はMark Longairの答えをアップvoteします私はできた。
追加された 著者 Colin R,
待って、何? Colin Rは現在、上位2%にあります:)
追加された 著者 Post Self,

この git-autopush スクリプトを使用すると、 「自動プッシュを設定するにはどうすればよいですか?」で推奨されているのと同様のコミット後のフックを作成できます。
しかし、パスフレーズについては、 ssh-agent <�を実行する必要があります。/a>。

3
追加された

LinuxやWindowsを使っている人のためにsshを使ってパスフレーズを入力せずにプッシュ/プルするための簡単な指示です(git bash)

あなたのクライアントで:

  1. Check out if you have ssh keys generated:

    $ ls ~/.ssh/id_rsa.pub; ls ~/.ssh/id_dsa.pub
    /c/Users/Cermo/.ssh/id_rsa.pub  <-- I have RSA key
    ls: cannot access '/c/Users/Cermo/.ssh/id_dsa.pub': No such file or directory
    
  2. If you don't have any key (two "ls: cannot access ..." lines) generate a new one. If you have any of the keys skip this step.

    $ ssh-keygen.exe
    Generating public/private rsa key pair.
    Enter file in which to save the key (/c/Users/Cermo/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase): <-- press Enter
    Enter same passphrase again: <-- press Enter
    
  3. Copy your key to remote server from which you want to pull or push using git:

    $ ssh-copy-id [email protected]_name
    /usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to 
    filter out any that are already installed
    /usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you 
    are prompted now it is to install the new keys
    [email protected]_name's password:
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh '[email protected]_name'"
    and check to make sure that only the key(s) you wanted were added.
    

注:この操作中にパスワードを入力する必要があります。その後プル/プッシュ操作はパスワードを要求しません。

注2:この手順を使用する前に、user_nameを少なくとも1回使用してサーバーにログインする必要があります(最初のログイン時にsshキーがコピーされるホームディレクトリが作成されます)

0
追加された