59

クレデンシャルヘルパーが設定されている場合~/.gitconfig、特定のリポジトリでそれを無効化/バイパスし、クレデンシャルヘルパーを使用しないようにするにはどうすればよいですか?

リポジトリのファイルを編集して、次のようにプロパティ.git/configを空白にしてみました。credential.helper

[credential]
    helper = 

...しかし、これを行うとgit push、次のエラーメッセージが表示され、Gitは~/.gitconfigとにかくデフォルトのクレデンシャルヘルパーを使用します。

git: 'credential-' is not a git command. See 'git --help'.

Did you mean this?
        credential

私はgitバージョン1.7.12を使用しています。

(バックストーリー/ユースケース:Gitはstore、パスワードを暗号化せずにディスクに保存するヘルパーを使用するように構成されcacheています。このシステムではヘルパーを使用できません。ディスクに保存するよりも毎回パスワードを入力したいリポジトリがいくつかあります。 。)

4

5 に答える 5

45

git 2.9(2016年6月)では、これ(helper =)は実際に機能します!

Jeff King()によるcommit 2432137(2016年2月26日)を参照してください。濱野純雄による合併---コミット1b689622016年4月3日peff
gitster

構成変数は累積的であり、credential.helperコマンドラインからオーバーライドする良い方法はありません。
特別な場合として、値として空の文字列を指定すると、さまざまなファイルで指定された値をクリアするためのシグナルとして機能するようになります

credential:空のクレデンシャル仕様でヘルパーリストをリセットする

キーは複数値の構成リストであるためcredential.helper、一度設定されたヘルパーを「設定解除」する方法はありません。したがって、システム/etc/gitconfigが1つを設定した場合、それを実行することを避けることはできませんが、その上に独自のヘルパーを追加するだけです。

の空の値credential.helperは無意味であるため(「git-credential-」を実行しようとするだけです)、誰もそれを使用していないと想定できます。ヘルパーリストをリセットするように定義して、以前に発生した優先度の低いインスタンスをオーバーライドできるようにします。


さらに便利:Git 2.26(2020年第1四半期)では、このオーバーライドはどの値にも適用されます。

ブライアンmによるコミット46fd7b3コミット82eb249コミット588c70eコミット732f934コミット3fa0e04(2020年2月20日)を参照してください。カールソン( ``)
濱野純雄による合併gitster---コミット2cbb058、2020年3月5日

credential:構成で最後に一致したユーザー名を使用する

サインオフ-作成者:brianm。カールソン

コードベースの他のすべての場所では、最後に一致する構成オプションが有効になるというルールを使用します。

これは、より具体的な構成設定(たとえば、リポジトリごとの構成)が、より具体的でない設定(たとえば、ユーザーごとの構成)をオーバーライドできるため便利です。

ただし、クレデンシャルコードでは、この設定を尊重せず、代わりに最初の設定を選択して、それを使用しました

これにより、構成で尊重したいURLから値を選択したことが確実になる可能性があります。

ただし、両方を行うことは可能です。そのため、値がプロトコル接続を介して取得した値であるかどうかを確認します。存在する場合は、URLから取得され、保持されている場合はそれを保持します。

それ以外の場合は、構成から取得した最新バージョンで値を上書きして、最後の構成値を保持します。


注:user202729はコメントを追加します:

クレデンシャルヘルパーAがグローバルとして設定されていBて、ローカルリポジトリで使用する場合(ヘルパーを削除するのではなく、変更する)、次を使用します。

git config --local credential.helper ''
git config --local --add credential.helper B

最初の空の項目は、グローバル設定を削除しますA

同様に、2行helper =helper = Bを設定し.git/configます。

于 2016-04-05T19:52:39.410 に答える
31

私が試し、うまく機能したのは次のとおりです。

$ git config --system --unset credential.helper

しかし、それがうまく機能するためには、管理者権限でgit-bash.exeを設定する必要がありました。

残念ながら、これはグローバル変数だと思います。単一のリポジトリで機能するかどうかをテストして確認する必要があります。

幸運を

于 2016-06-08T21:48:21.323 に答える
21

上記のGit2.9で述べgit config credential.helper=た' 'に加えて、(Git 2.13.x/Git 2.14、2017年第3四半期)1つのコマンド(特定のリポジトリ内のコマンドだけでなく)に対してのみ資格ヘルパーを無効にできます。

つまり、git -c credential.helper= clone /url/remote/repo今は機能します。

" git clone --config var=val"は、新しいリポジトリのリポジトリごとの構成ファイルにデータを入力する方法ですが、valが空の文字列の場合はうまく機能しませんでした
これは修正されました。

Jonathan Nieder()によるcommit db4eca1(2017年5月2日)を参照してください。濱野純雄による合併---コミット883247c、 20175月16日)artagnon
gitster

clone:空の構成値を処理する-c

" git clone --config"は、既存の値を置き換える代わりに、次の呪文を使用して構成ファイルに項目を追加します。

git_config_set_multivar_gently(key, value, "^$", 0)

正規表現に一致する既存の値がない限り^$、それは意図したとおりに機能し、構成に追加されます。ただし、値が空の場合は、既存の値が置き換えられます。

クローン中に、およびcredential.helperを継承せずに特定のヘルパーを使用するように設定しようとしているときに気づきました。 つまり、私は実行しました:~/.gitconfig/etc/gitconfig

git clone -c credential.helper= \
     -c credential.helper=myhelper \
     https://example.com/repo

構成を作成する予定:

[credential]
     helper =
     helper = myhelper

このパッチがないと、' helper ='行は含まれず、のクレデンシャルヘルパー/etc/gitconfigが使用されます。


commit 515360fを使用すると、ドキュメントがより明確になることに注意してください。

クレデンシャルドキュメント:複数のヘルパーの動作をより目立たせる

Gitの構成システムは、複数の構成ファイルを一般的なものから特定のものへと順番に読み取ることで機能します。

  • まず、システム構成/etc/gitconfig
  • 次に、ユーザーの構成(~/.gitconfigまたは~/.config/git/config
  • 次に、リポジトリ構成(.git/config

単一値の構成アイテムの場合、最新の値が優先されます。
複数値の構成アイテムの場合、値はこの順序で累積されます。

たとえば、これにより、~/.gitconfiggitが別のヘルパーを追加で提供するかどうかに関係なく、すべてのリポジトリで使用しようとするクレデンシャルヘルパーをグローバルに設定できます。
これは通常、すばらしいことです。たとえば、ヘルパーをインストールしてOSキーチェーンを使用し、グローバルに短期間クレデンシャルをキャッシュできます。

継承された設定を上書きできるようにしたい場合があります。
設定の場合credential.helper、これは、新しい値を指定する前に構成アイテムを空に設定することによって行われます

于 2017-05-17T19:30:15.827 に答える
19

空の文字列に設定されている構成変数は、未設定の変数と同じではありません。.git/config変数がすでに設定されている場合、変数を強制的に設定解除することはできません~/.gitconfig

さらにcredential.helper、これらの変数の1つであり、複数の値が使用されます。このような場合、値はすべての読み取り構成ファイルから集約されます。

したがって、基本的にあなたのオプションは次のように思われます:

  • credential.helperどちらも使用しないでください~/.gitconfig; ストアヘルパーは、リポジトリ内.git/config、または~/.gitconfigリポジトリURLを指定して、必要なリポジトリに対してのみ設定します。

    [credential "https://specific.example.com/repo.git"]
    helper = store
    
  • または、構成されたリポジトリーのセットに対して何も行わずgit credential-store、残りのリポジトリーに委任する独自のヘルパーを実装します。

于 2012-11-02T22:01:33.650 に答える
1

私が設定した最初のcredential.helperは、新しいものをテストしたいときに常に実行されていたので、私もこの問題に遭遇しました。これは、Appleの開発ツールで提供されるgitを使用するmacOS上にあります。

構成を一覧表示すると、git config --list両方のヘルパーが表示されます。

実行git config --global --editすると、最初のヘルパーの設定が表示されませんでした。ヘルパーを構成するときの--globalが、構成を編集するときの--globalと同じスコープではないのは少し奇妙です。

また、別のヘルパーを含めたかったので、空白にするだけでは解決しませんでした。

最後に2つの場所で設定を見つけました:

  • /Library/Developer/CommandLineTools/usr/share/git-core/gitconfig
  • /Applications/Xcode.app/Contents/Developer/usr/share/git-core/gitconfig

最初のセクションから資格情報セクションを削除しましたが、両方の設定は引き続きを使用してリストされてい--listました。再起動して、unset、unset-all --system、-globalなどのすべての組み合わせを試した後、2番目のファイルが見つかりました。

そのファイルから設定を削除し(これも1つだけでした)、最終的に--list構成されたヘルパーは表示されません。

于 2019-01-22T10:07:59.920 に答える