2015

最近、リポジトリを GitHub の https:// に同期するように切り替えましたが (ファイアウォールの問題のため)、毎回パスワードを要求されます。

毎回認証する代わりに、資格情報をキャッシュする方法はありgit pushますか?

4

26 に答える 26

2530

Git 1.7.9 (2012 年リリース) 以降、Git には、HTTP / HTTPS で常にパスワードを入力する必要がないようにする、資格情報ヘルパーと呼ばれるきちんとしたメカニズムがあります。

次の資格情報ヘルパーのいずれかを使用できます。

git config --global credential.helper cache

credential.helper キャッシュ値は、 Git に、特定の時間の間、パスワードをメモリにキャッシュしておくように指示します。デフォルトは 15 分ですが、次の方法でより長いタイムアウトを設定できます。

git config --global credential.helper "cache --timeout=3600"

キャッシュを 1 時間設定するか、次のようにします。

git config --global credential.helper "cache --timeout=86400"

1日。必要に応じて、資格情報を永続的に保存することもできます。以下の他の回答を参照してください。

GitHub のヘルプでは、Mac OS X を使用していて、Homebrewを使用して Git をインストールしている場合、ネイティブの Mac OS X キーストアを次のように使用できることも示唆されています。

git config --global credential.helper osxkeychain

Windowsの場合、Windows用の Git Credential Managerまたはmsysgit の wincredというヘルパーがあります。

git config --global credential.helper wincred # obsolete

Git for Windows 2.7.3 以降( 2016 年 3 月):

git config --global credential.helper manager

Linuxの場合、(2011 年に) gnome-keyring(または KWallet などの他のキーリング実装) を使用します。

現在 (2020 年)、それは (Linux 上で)

フェドーラ

sudo dnf install git-credential-libsecret
git config --global credential.helper /usr/libexec/git-core/git-credential-libsecret

Ubuntu

sudo apt-get install libsecret-1-0 libsecret-1-dev
cd /usr/share/doc/git/contrib/credential/libsecret
sudo make
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
于 2011-03-17T17:54:13.077 に答える
751

次のように git-credential-storeを使用して、Git に資格情報を永続的に保存させることもできます。

git config credential.helper store

注: これは便利ですが、Git はプロジェクト ディレクトリ (「ホーム」ディレクトリについては以下を参照) の下のローカル ファイル (.git-credentials) に資格情報をクリア テキストで保存します。これが気に入らない場合は、このファイルを削除して、キャッシュ オプションの使用に切り替えてください。

Git がリモート リポジトリに接続する必要があるたびに認証情報を要求するようにするには、次のコマンドを実行します。

git config --unset credential.helper

プロジェクト ディレクトリではなく.git-credentials、自分のディレクトリにパスワードを保存するには、次のフラグを使用します。%HOME%--global

git config --global credential.helper store
于 2012-09-03T01:14:39.387 に答える
45

ユーザー資格情報を HTTPS URL に格納する簡単で昔ながらの方法があります。

https://user:password@github.com/...

でURLを変更できますgit remote set-url <remote-repo> <URL>

このアプローチの明らかな欠点は、パスワードをプレーン テキストで保存する必要があることです。ユーザー名 ( https://user@github.com/...) を入力するだけで、少なくとも手間が半分になります。

SSH に切り替えるか、GitHub クライアント ソフトウェアを使用することをお勧めします。

于 2014-01-06T16:43:56.733 に答える
23

最初にヘルパーをダウンロードする必要があることはすぐにはわかりませんでした。Atlassian の Permanently authenticationing with Git repositoriesで credential.helper のダウンロードを見つけました。

見積もり:

OS X で資格情報キャッシュを使用して Git を使用する場合は、次の手順に従います。

バイナリ git-credential-osxkeychain をダウンロードします。

以下のコマンドを実行して、バイナリが実行可能であることを確認します。

chmod a+x git-credential-osxkeychain

ディレクトリに配置し/usr/local/binます。

以下のコマンドを実行します。

git config --global credential.helper osxkeychain
于 2012-10-05T05:31:39.703 に答える
23

URL の一部としてログイン資格情報を含めるだけです。

git remote rm origin
git remote add origin https://username:mypassword@github.com/path/to/repo.git

注: この方法はお勧めしませんが、急いでいて他に何もうまくいかない場合は、この方法を使用できます。

于 2014-07-03T07:13:52.007 に答える
22

GNU/Linux セットアップでは、 ~/.netrc も非常にうまく機能します:

$ cat ~/.netrc
machine github.com login lot105 password howsyafather

Git がHTTPSトランスポートに使用しているネットワーク ライブラリによって異なる場合があります。

于 2012-12-05T13:28:51.443 に答える
16

Git Credential Manager (GCM) プラグインを使用できます。現在、GitHub によって管理されています。良い点は、パスワードがプレーン テキストとしてではなく、Windows 資格情報ストアに保存されることです。

プロジェクトのリリース ページにインストーラーがあります。これにより、資格情報マネージャーが組み込まれた公式バージョンのGit for Windowsもインストールされます。これにより、GitHub (およびその他のサーバー) の2 要素認証が可能になります。また、最初にログインするためのグラフィカル インターフェイスがあります。

Cygwin ユーザー (または Windows 用の公式 Git を既に使用しているユーザー) の場合は、手動インストールを好むかもしれません。リリース ページから zip パッケージをダウンロードします。パッケージを解凍し、install.cmdファイルを実行します。これにより、~/binフォルダーにインストールされます。(~/binディレクトリが PATH にあることを確認してください。) 次に、次のコマンドを使用して構成します。

git config --global credential.helper manager

その後、Git はgit-credential-manager.exe任意のサーバーへの認証時に を実行します。

于 2014-05-24T07:49:14.633 に答える
14

マークが言ったようにパスワードをプレーンテキストで保存したくない場合は、プッシュとは異なる GitHub URL をフェッチに使用できます。構成ファイルの の下[remote "origin"]:

url = git://github.com/you/projectName.git
pushurl = git@github.com:you/projectName.git

少なくともオープン ソース プロジェクトでは、プッシュ時にパスワードを要求しますが、フェッチ時には要求しません。

于 2011-03-19T08:12:07.030 に答える
14

OAuth

独自の個人用 API トークン( OAuth ) を作成し、通常の資格情報を使用するのと同じ方法で使用できます (at: /settings/tokens)。例えば:

git remote add fork https://4UTHT0KEN@github.com/foo/bar
git push fork

.netrc

もう 1 つの方法は、~/.netrc( _netrcWindows の場合) でユーザー/パスワードを構成することです。

machine github.com
login USERNAME
password PASSWORD

HTTPS の場合は、次の行を追加します。

protocol https

資格ヘルパー

HTTPSを使用しているときにGitHub パスワードを Git にキャッシュするには、クレデンシャル ヘルパーを使用して、Git が GitHub と通信するたびに GitHub のユーザー名とパスワードを記憶するように指示します。

  • Mac: git config --global credential.helper osxkeychain(osxkeychain helperは必須)、
  • ウィンドウズ:git config --global credential.helper wincred
  • Linux およびその他:git config --global credential.helper cache

関連している:

于 2016-06-19T22:44:20.747 に答える
11

資格ヘルパーを使用できます。

git config --global credential.helper 'cache --timeout=x'

x秒数です。

于 2013-03-27T16:23:10.810 に答える
11

リポジトリを複製した後、以下のような構成repoを編集repo/.git/configおよび追加できます。

[user]
    name = you_name
    password = you_password
[credential]
    helper = store

usernameその後、何度も求められることはありませんpassword

于 2017-01-05T09:42:32.587 に答える
8

これが安全なソリューションではないことはわかっていますが、他に何もインストールせずに、単純なソリューションが必要な場合があります。helper = storeがうまくいかなかったので、ダミーのヘルパーを作成しました。

スクリプトを作成し、ユーザーの bin フォルダー (ここではcredfakeという名前) に配置します。このスクリプトは、ユーザー名とパスワードを提供します。

#!/bin/bash
while read line
do
  echo "$line"
done < "/dev/stdin"
echo username=mahuser
echo password=MahSecret12345

実行可能にします:

chmod u+x /home/mahuser/bin/credfake

次に、git で構成します。

git config --global credential.helper /home/mahuser/bin/credfake

(または、1つのリポジトリのみに --global なしで使用します)

そして-出来上がり-gitはこのユーザーとパスワードを使用します。

于 2017-05-27T11:26:50.597 に答える
6

セキュリティのために資格情報を使用することをお勧めしますが、キャッシュを使用してしばらくの間保持することができます。

git config --global credential.helper cache
git config credential.helper 'cache --timeout=3600'

資格情報は 3600 秒間保存されます。

于 2014-07-17T10:18:12.997 に答える
2

また、 bashrcファイルを編集してスクリプトを追加します。

これにより、Git の起動時に一度パスワードを要求され、ログオフするまでパスワードが記憶されます。

SSH_ENV=$HOME/.ssh/environment
  
# Start the ssh-agent
function start_agent {
    echo "Initializing new SSH agent..."

    # Spawn ssh-agent
    /usr/bin/ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}"
    echo succeeded
    chmod 600 "${SSH_ENV}"
    . "${SSH_ENV}" > /dev/null
    /usr/bin/ssh-add
}
  
if [ -f "${SSH_ENV}" ]; then
     . "${SSH_ENV}" > /dev/null
   ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || {
      start_agent;
  }
else
    start_agent;
fi
于 2016-07-14T18:02:57.417 に答える