91

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

4

8 に答える 8

155

まず、パスワードを入力せずに手動でプッシュできることを確認してください。HTTP または HTTPS 経由でプッシュする場合は、ログインの詳細を含むファイルを作成する.netrc、ユーザー名とパスワードをリモートの URL に追加する必要があります。SSH を使用している場合は、秘密鍵にパスワードがないキーペアを作成するか、秘密鍵をキャッシュするために使用できssh-agentます。

次に、以下を含む実行可能 ( chmod +x) ファイルを作成する必要があります。.git/hooks/post-commit

#!/bin/sh
git push origin master

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

于 2011-10-28T06:32:17.633 に答える
34

マスター ブランチ以外のブランチを使い始める場合は、現在のブランチを自動的にプッシュすることをお勧めします。私のフック ( .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 -eq 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 post-commit hook]"
        echo
        git push origin $branch_name;
    fi
fi

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

Git で現在のブランチ名を取得する方法」では、現在のブランチ名を取得する方法とその他の方法について説明しています。

ソーセージの作成が予想されるタスクブランチで作業する場合、すべてのブランチの自動プッシュは邪魔になる可能性があります(プッシュ後に簡単にリベースすることはできません)。したがって、フックは、定義されたサフィックス (例では "_local") で終わるブランチをプッシュしません。

于 2015-01-20T10:24:24.557 に答える
10

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

于 2011-10-28T06:32:33.460 に答える
3

このgit-autopushスクリプトを使用すると、「自動プッシュの構成方法」で推奨されているものと同様に、コミット後のフックをセットアップできます。
ただし、パスフレーズについてはssh-agent .

于 2011-10-28T06:32:22.040 に答える
0

Linux および Windows ( Git Bash )を使用しているユーザー向けに、SSH 経由でパスフレーズを提供せずにプッシュ/プルするための簡単な手順を次に示します。

クライアントで:

  1. SSH キーが生成されているかどうかを確認します。

     $ 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: cannot access ...」行)、新しいキーを生成します。いずれかのキーがある場合は、この手順をスキップしてください。

    $ 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. git を使用してプルまたはプッシュするリモート サーバーにキーをコピーします。

    $ ssh-copy-id user_name@server_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
    user_name@server_name's password:
    
    Number of key(s) added: 1
    
    Now try logging into the machine, with:   "ssh 'user_name@server_name'"
    and check to make sure that only the key(s) you wanted were added.
    

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

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

于 2016-08-24T20:42:38.203 に答える