最近、(ファイアウォールの問題から)GitHub上のhttps://、リポジトリの同期に切り替えたのですが、毎回パスワードを要求されます。
git push`のたびに認証するのではなく、認証情報をキャッシュする方法はありませんか?
Git 1.7.9 (2012年1月下旬リリース) 以降、Git には credential helpers と呼ばれる、HTTP / HTTPS で常にパスワードを入力しなくても済むようなきちんとした仕組みがあります。(以下のコメントでこの新機能を指摘してくれたdazonicさんに感謝します)
Git 1.7.9以降では、以下のクレデンシャル・ヘルパーのいずれかを使用すればよいでしょう。
git config --global credential.helper cache
... これは、パスワードを (デフォルトで) 15 分間メモリにキャッシュしておくよう Git に指示します。より長いタイムアウトを設定するには、次のようにします。
git config --global credential.helper "cache --timeout=3600"
(この例は、GitHub help page for Linuxで提案されています。) また、必要に応じて認証情報を永久に保存することもできますが、以下の他の回答を参照ください。
GitHubのヘルプでは、Mac OS XでHomebrewを使ってGitをインストールした場合には、Mac OS Xのネイティブなキーストアを使うことができると示唆されています。
git config --global credential.helper osxkeychain
Windowsの場合は、Git Credential Manager for Windowsまたはwincred in msysgitというヘルパーがあります。
git config --global credential.helper wincred # obsolete
Git for Windows 2.7.3+]8 (2016年3月)を使用しています。
git config --global credential.helper manager
Linuxの場合は、gnome-keyring
(またはKWalletなどの他のキーリング実装)を使用することができます。
1.7.9 より前のバージョンの Git では、このより安全なオプションは使用できません。この方法でパスワードを含めるには、origin
リモートが使用する URL を変更する必要があります。
https://you:[email protected]/you/example.git
... 言い換えると、:password
をユーザー名の後、@
の前に置くということです。
新しい URL を origin
リモートに設定するには、次のようにします。
git config remote.origin.url https://you:[email protected]/you/example.git
必ず https
を使うようにしましょう。このようにすると、GitHub のパスワードが .git
ディレクトリに平文で保存されることになりますが、これは明らかに望ましくありません。
これは明らかに好ましくありません。 ### Git のすべてのバージョン (というかバージョン 0.99 以降) で
ユーザー名とパスワードを ~/.netrc
ファイルに記述するという方法もあります。しかし、リモート URL にパスワードを記述する場合と同様に、パスワードはディスク上に平文で保存されることになるので、安全性が低くお勧めできません。しかし、この方法を取りたい場合は、~/.netrc
に以下の行を追加してください。
machine <hostname> login <username> password <password>
... <hostname>
をサーバのホスト名に、<username>
と <password>
をユーザ名とパスワードに置き換えてください。また、このファイルに制限的なファイルシステムパーミッションを設定することも忘れないでください。
chmod 600 ~/.netrc
なお、Windowsでは、このファイルは「_netrc」と呼ばれるべきで、環境変数「%HOME%」を定義する必要があるかもしれません。
次のようにして、Gitに認証情報を永続的に保存させることもできます。
git config credential.helper store
注意: これは便利な方法ですが、Git はあなたの認証情報を平文でプロジェクトディレクトリのローカルファイル (.git-credentials) に保存します。 に平文で保存されます。プロジェクトのディレクトリ (ホームディレクトリについては後述します) にあるローカルファイル (.git-credentials) にです。もしこれが気に入らなければ、このファイルを削除して cache オプションを使うようにしましょう。
Git がリモートリポジトリに接続するたびに認証情報の入力を求めるのをやめさせたい場合は、次のようにします。 リモートリポジトリへの接続が必要になるたびに認証情報の入力を求めるようにしたい場合は、次のコマンドを実行します。
git config --unset credential.helper
.git-credentialsに格納するパスワードを、プロジェクトのディレクトリではなく自分の
%HOME%ディレクトリに格納したい場合は、
--global` フラグを使います。
git config --global credential.helper store
Mark が言ったようにパスワードを平文で保存したくない場合は、取得用の GitHub URL とプッシュ用の GitHub URL を使い分ければよいでしょう。設定ファイルの [remote "origin"]
の下にある
url = git://github.com/you/projectName.git
pushurl = [email protected]:you/projectName.git
少なくともオープンソースのプロジェクトでは、プッシュするときにはパスワードを求められますが、フェッチするときには求められません。