ローカル リポジトリにコミットするたびに、Git をリモート リポジトリに自動的にプッシュする (パスフレーズの自動提供を含む) ように設定するにはどうすればよいですか?
8 に答える
まず、パスワードを入力せずに手動でプッシュできることを確認してください。HTTP または HTTPS 経由でプッシュする場合は、ログインの詳細を含むファイルを作成する.netrc
か、ユーザー名とパスワードをリモートの URL に追加する必要があります。SSH を使用している場合は、秘密鍵にパスワードがないキーペアを作成するか、秘密鍵をキャッシュするために使用できssh-agent
ます。
次に、以下を含む実行可能 ( chmod +x
) ファイルを作成する必要があります。.git/hooks/post-commit
#!/bin/sh
git push origin master
origin
... 以外のリモートにプッシュする場合、または 以外のブランチをプッシュする場合は、その行をカスタマイズします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 -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") で終わるブランチをプッシュしません。
.git/hooksディレクトリに「git push」という内容の「post-commit」という名前のファイルを作成します。ただし、パスワードを自動的に提供する場合は、変更が必要になります。
このgit-autopushスクリプトを使用すると、「自動プッシュの構成方法」で推奨されているものと同様に、コミット後のフックをセットアップできます。
ただし、パスフレーズについては、ssh-agent
.
Linux および Windows ( Git Bash )を使用しているユーザー向けに、SSH 経由でパスフレーズを提供せずにプッシュ/プルするための簡単な手順を次に示します。
クライアントで:
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 つの「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
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 キーがコピーされるホーム ディレクトリは、最初のログイン時に作成されます)。