2011-10-28 17 views
54

ローカルリポジトリにコミットするたびに自動的にリモートレポ(パスフレーズの自動提供を含む)にプッシュするようにgitを設定しますか?gitでコミットした後に自動的にプッシュする方法は?

+1

を超える推進している(SSHキーが最初のログイン時に作成されたコピーされるために、ホームディレクトリ)は、この手順を使用する前に、少なくとも1回のuser_nameを使用してサーバーにログインする必要がありますか?パスワードの入力を求められたら、これはSSHかHTTPのどちらかと仮定します。 –

+1

また、gitの質問では、使用しているオペレーティングシステムについて少なくとも言及することが役に立ちます。 –

+0

私はそのような設定の知恵に疑問を呈します。これにより、変更内容を異なるコミットセット(特にリベース)に再編成する機能が削除されます。私はこのような設定のために、あまりにも多くの間違いを犯して、私にとって有益なものになってしまう。 – jpmc26

答えて

99

まず、パスワードを入力せずに手動でプッシュできることを確認します。 HTTPまたはHTTPSを押している場合は、creating a .netrc file with the login detailsまたはadding your username and password into the URL for the remoteのいずれかの場合があります。 SSHを使用している場合、秘密鍵がパスワードを持たない鍵ペア、またはuse ssh-agent to cache your private keyを作成することができます。あなたはoriginよりも、リモート他にプッシュ、またはmaster以外のブランチをプッシュする場合は、その行をカスタマイズ...

#!/bin/sh 
git push origin master 

その後、あなたは次のものが含まれてい.git/hooks/post-commitにファイルを作成する必要があります。そのファイルを実行可能にすることを確認してください。

+2

ssh-agentはパスフレーズを覚えていないので、空にする必要がありました。私の妻が私のアカウントをハックしないことを願っています:) – ulu

+0

カスタマイズについて言えば、私はこのようにすべてのブランチではなく一部をプッシュしたいのですが?たとえば、 '.git/config'に書かれている対応するリモートブランチを持つブランチだけを' feature/xy/'という接頭辞で自動プッシュしたいとします。 –

+2

git push -all origin – Yada

6

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

+0

私はMark Longairの[回答](http://stackoverflow.com/questions/7925850/how-to-automatically-push-後でコミットしているgit/7925891#7925891)。 –

+3

私はあなたのためにそれをしました。 – ulu

+0

待って、何? Colin Rがトップ2%になりました:) – kim366

18

マスターブランチ以上の使用を開始した場合は、現在のブランチを自動的にプッシュしたい場合があります。私のフックは次のようになります。

#!/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のシンボリック-REFと支店名を決めることができればそれは、現在のブランチをプッシュします。

"How to get current branch name in Git?"は、この方法と現在のブランチ名を取得する他の方法を扱います。

sausage makingが発生すると予想されるタスクブランチで作業すると、すべてのブランチの自動プッシュが邪魔になることがあります(プッシュした後は簡単に再分割できません)。したがって、フックは定義された接尾辞で終わるブランチをプッシュしません(この例では "_local")。ここで

+0

最初の行では、##/ bin/shを使って動作させなければなりませんでした。それ以外の場合は、 'エラー:.git/hooks/post-commitを実行できません:そのようなファイルやディレクトリはありません。ありがとう、私はあなたのソリューションが一番好きです。 – oyalhi

+0

コメントありがとう、@oyalhi、私は答えの中のシバンの行を更新しました。それは今より良いはずです! – i4h

0

は、クライアント上でLinuxとWindows(のgit bashの)

を使用している人々のためにSSH経由でパスフレーズを提供せずに引っ張っ/プッシュするための簡単な命令である:あなたが生成されたSSHキーを持っている場合

  1. をチェック:

    $ 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. あなたが任意のキー(2「のLS:アクセスすることはできません...」の行を)持っていない場合は、新しいものを生成します。いずれかのキーがある場合は、このステップをスキップしてください。

    $ 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. 
    

注:

$ 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 
  • は、あなたが引くかのgitを使用してプッシュしたいからリモートサーバへの鍵をコピーしますが、この操作中にパスワードを入力する必要があります。その後プル/プッシュ操作はパスワードを要求しません。

    注2:あなたはどのようなプロトコルを

  • 関連する問題