異なるgitリポジトリのユーザー名とパスワードを設定する方法は?


17
─[$] cat ~/.gitconfig

[user]
    name = Shirish Agarwal
    email = xxxx@xxxx.xxx
[core]
    editor = leafpad
    excludesfiles = /home/shirish/.gitignore
    gitproxy = \"ssh\" for gitorious.org
[merge]
    tool = meld
[push]
    default = simple
[color]
    ui = true
    status = auto
    branch = auto

今、私はgithub、gitlab、gitoriousのgitクレデンシャルを配置したいので、毎回ブラウザでクレデンシャルを検索する必要はありません。自動化するにはどうすればいいですか?

私はzshを実行しています

回答:


19

SSHを使用する

git認証を処理するための一般的なアプローチは、それをSSHに委任することです。通常は、リモートリポジトリ(であなたのSSH公開鍵を設定するなど のGitHub上に)、その後、あなたが認証するために必要なときに使用していること。あなたは、あなたのデスクトップ環境で扱うか、または手動のいずれかで、当然のキーエージェントを使用することができるssh-agentssh-add

ユーザー名を指定しなくても済むように、SSHでも設定できます~/.ssh/config。例えば、私は持っています

Host git.opendaylight.org
  User skitt

そして、私はを使用してクローンを作成できます

git clone ssh://git.opendaylight.org:29418/aaa

(そこにユーザー名がないことに注意してください)。

を使用して gitcredentials

SSHアプローチが適用されない場合(たとえば、HTTPS経由でアクセスするリポジトリを使用している場合)、gitは独自の方法で資格情報を処理しますgitcredentials(通常はgit-credential-store)。を使用してユーザー名を指定します

git config credential.${remote}.username yourusername

とを使用して資格情報ヘルパー

git config credential.helper store

--globalこのセットアップをどこでも使用するかどうかを指定します)。

次に、リポジトリに初めてアクセスすると、gitがパスワードを要求し、保存されます(デフォルトでは~/.git-credentials)。リポジトリへの以降のアクセスでは、保存するパスワードを尋ねる代わりに使用します。


1
credential.${remote} とについて少し詳しく説明してくださいcredential.helper。私がそれについて読んでいるのはこれが初めてなので、あなたが指摘できるドキュメントがありますか。
シャーリッシュ

私は答えのマンページにリンクしました、それがドキュメントです。${remote}クローンを作成するURIのプロトコルとホスト名の部分で、helperヘルパープログラムを指します。
スティーブンキット

1
このトピックに関するPro Gitのもあります。
スティーブンキット

6

後でこれを見つける人のために-私はこれに苦労し、最終的にそれを機能させました

https / credentials.helper / Ubuntu

  1. グローバルに設定解除:
    git config --global --unset credentials.helper
  2. ローカルで設定解除:(各リポジトリで) git config --unset credential.helper
  3. 各リポジトリの資格情報ファイルを作成します:(各リポジトリ内)

    git config credential.helper 'store --file ~/.git_reponame_credentials'
    

それが最良の方法または唯一の方法であるとは言いませんが、数時間イライラした後、私にとってはうまくいきました。


スティーブン・キットが上記で共有したものに似ているようです。
shirish

2
@shirishではありませんが、3番目のポイントは必要なものでした-ファイルの場所を指定するオプション。
マーティシュブリーディス

@shirish; また、Kittsの指示では資格情報の設定解除を指定していません。これは、既にグローバルに設定しているため、私にとって重要なコンポーネントでした。
SteveJ

また、すべてのgitリポジトリのようではないため、これにも問題がありました。同じソース/ストアから取得します。2番目の方法は優れていますが、実際に動作するのはずっとイライラします。まだ共有してくれてありがとう。@SteveJ
シャーリッシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.