threads / discuss / 57199

Problem with credential.helper=store in git 2.32.0.windows.2

Subject: Problem with credential.helper=store in git 2.32.0.windows.2

## tl;dr

5 messages between Jan 6, 2022 and Jan 10, 2022.

replies: 4people: 3as markdown or json

Imi Admin· Jan 6, 2022, 12:32 UTC · lore
Hi all,
i've filled out the bug report below, maybe you can help me...
Best Sebastian
*****************************************************************************

Thank you for filling out a Git bug report! Please answer the following questions to help us understand your issue.

What did you do before the bug happened? (Steps to reproduce your issue)

I sometimes have to use git commands on a remote Windows10 through a ssh shell (PowerShell Server, so powershell as the shell). I'm creating a credentials store file for these commands and set the local git configuration credential.helper=store to point to this file. Here's my local git configuration:

PS C:\scripts> git config -l --show-origin file:C:/Program Files/Git/etc/gitconfig diff.astextplain.textconv=astextplain file:C:/Program Files/Git/etc/gitconfig filter.lfs.clean=git-lfs clean -- %f file:C:/Program Files/Git/etc/gitconfig filter.lfs.smudge=git-lfs smudge -- %f file:C:/Program Files/Git/etc/gitconfig filter.lfs.process=git-lfs filter-process file:C:/Program Files/Git/etc/gitconfig filter.lfs.required=true file:C:/Program Files/Git/etc/gitconfig http.sslbackend=openssl file:C:/Program Files/Git/etc/gitconfig http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt file:C:/Program Files/Git/etc/gitconfig core.autocrlf=true file:C:/Program Files/Git/etc/gitconfig core.fscache=true file:C:/Program Files/Git/etc/gitconfig core.symlinks=false file:C:/Program Files/Git/etc/gitconfig core.editor="C:\\Program Files\\Notepad++\\notepad++.exe" -multiInst -notabbar -nosession -noPlugin file:C:/Program Files/Git/etc/gitconfig pull.rebase=false file:C:/Program Files/Git/etc/gitconfig credential.helper=manager-core file:C:/Program Files/Git/etc/gitconfig credential.https://dev.azure.com.usehttppath=true file:C:/Program Files/Git/etc/gitconfig init.defaultbranch=master file:.git/config core.repositoryformatversion=0 file:.git/config core.filemode=false file:.git/config core.bare=false file:.git/config core.logallrefupdates=true file:.git/config core.symlinks=false file:.git/config core.ignorecase=true file:.git/config remote.origin.url=https://mygitlab.de/mygroup/myrepo.git file:.git/config remote.origin.fetch=+refs/heads/*:refs/remotes/origin/* file:.git/config branch.master.remote=origin file:.git/config branch.master.merge=refs/heads/master file:.git/config user.name=myname file:.git/config user.email=my@email file:.git/config credential.helper=store --file C:/scripts/.git/.git-credentials

What did you expect to happen? (Expected behavior)

I'd expect that a 'git pull' against my remote simply works without asking me for a user name and password.

What happened instead? (Actual behavior)
My ssh connection hangs...
What's different between what you expected and what actually happened?
Please see above and below...
Anything else you want to add:

My approach worked in a prior git for windows version. When i use the same approach on the same remote Windows 10 client via RDP in Powershell, i see that *before* git uses the credential store file, it displays the windows credential dialog. If i click 'cancel' in the dialog, git uses the credential store file:

PS C:\scripts> git pull 09:33:11.471005 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/bin 09:33:11.471005 git.c:455 trace: built-in: git pull 09:33:11.471005 run-command.c:667 trace: run_command: git fetch --update-head-ok 09:33:11.486629 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 09:33:11.502137 git.c:455 trace: built-in: git fetch --update-head-ok 09:33:11.502137 run-command.c:667 trace: run_command: GIT_DIR=.git git remote-https origin https://mygitlab.de/mygroup/myrepo.git 09:33:11.517762 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 09:33:11.517762 git.c:744 trace: exec: git-remote-https origin https://mygitlab.de/mygroup/myrepo.git 09:33:11.517762 run-command.c:667 trace: run_command: git-remote-https origin https://mygitlab.de/mygroup/myrepo.git 09:33:11.611382 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 09:33:11.720731 run-command.c:667 trace: run_command: 'git credential-manager-core get' 09:33:11.783217 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 09:33:11.798838 git.c:744 trace: exec: git-credential-manager-core get 09:33:11.798838 run-command.c:667 trace: run_command: git-credential-manager-core get fatal: User cancelled the authentication prompt. 09:33:22.955081 run-command.c:667 trace: run_command: 'git credential-store --file C:/scripts/.git/.git-credentials get' 09:33:22.970702 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 09:33:22.970702 git.c:455 trace: built-in: git credential-store --file C:/scripts/.git/.git-credentials get 09:33:23.174185 run-command.c:667 trace: run_command: 'git credential-manager-core store' 09:33:23.236463 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 09:33:23.236463 git.c:744 trace: exec: git-credential-manager-core store 09:33:23.236463 run-command.c:667 trace: run_command: git-credential-manager-core store 09:33:23.689909 run-command.c:667 trace: run_command: 'git credential-store --file C:/scripts/.git/.git-credentials store' 09:33:23.705534 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 09:33:23.705534 git.c:455 trace: built-in: git credential-store --file C:/scripts/.git/.git-credentials store 09:33:23.892547 run-command.c:667 trace: run_command: git rev-list --objects --stdin --not --all --quiet --alternate-refs 09:33:23.924306 run-command.c:667 trace: run_command: git rev-list --objects --stdin --not --all --quiet --alternate-refs 09:33:23.924306 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 09:33:23.924306 git.c:455 trace: built-in: git rev-list --objects --stdin --not --all --quiet --alternate-refs 09:33:23.939814 run-command.c:1628 run_processes_parallel: preparing to run up to 1 tasks 09:33:23.939814 run-command.c:1660 run_processes_parallel: done 09:33:23.939814 run-command.c:667 trace: run_command: git maintenance run --auto --no-quiet 09:33:23.939814 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 09:33:23.939814 git.c:455 trace: built-in: git maintenance run --auto --no-quiet 09:33:23.939814 run-command.c:667 trace: run_command: git merge FETCH_HEAD 09:33:23.955440 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 09:33:23.955440 git.c:455 trace: built-in: git merge FETCH_HEAD Already up to date.

The same happens when i try this with the ssh connection, but the command hangs when trying to exec git-credential-manager-core get:

PS C:\scripts> git pull 10:02:33.240054 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/bin 10:02:33.240054 git.c:455 trace: built-in: git pull 10:02:33.240054 run-command.c:667 trace: run_command: git fetch --update-head-ok 10:02:33.255676 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 10:02:33.255676 git.c:455 trace: built-in: git fetch --update-head-ok 10:02:33.255676 run-command.c:667 trace: run_command: GIT_DIR=.git git remote-https origin https://imiadmgit.f4.htw-berlin.de/f4-imi-li/windows-scripts.git 10:02:33.255676 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 10:02:33.255676 git.c:744 trace: exec: git-remote-https origin https://imiadmgit.f4.htw-berlin.de/f4-imi-li/windows-scripts.git 10:02:33.255676 run-command.c:667 trace: run_command: git-remote-https origin https://imiadmgit.f4.htw-berlin.de/f4-imi-li/windows-scripts.git 10:02:33.271297 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 10:02:33.380647 run-command.c:667 trace: run_command: 'git credential-manager-core get' 10:02:33.396268 exec-cmd.c:237 trace: resolved executable dir: C:/Program Files/Git/mingw64/libexec/git-core 10:02:33.396268 git.c:744 trace: exec: git-credential-manager-core get 10:02:33.396268 run-command.c:667 trace: run_command: git-credential-manager-core get

Anyway as far as i understood git should not exec git-credential-manager-core get at all with my local git configuration?

Please review the rest of the bug report below. You can delete any lines you don't wish to share.

[System Info] git version: git version 2.32.0.windows.2 cpu: x86_64 built from commit: 3d45ac813c4adf97fe3733c1f763ab6617d5add5 sizeof-long: 4 sizeof-size_t: 8 shell-path: /bin/sh feature: fsmonitor--daemon uname: Windows 10.0 19043 compiler info: gnuc: 10.3 libc info: no libc information available $SHELL (typically, interactive shell): <unset>

[Enabled Hooks]
*****************************************************************************
-- 
Thanks, Sebastian
Johannes Schindelin· Jan 9, 2022, 21:53 UTC · re: Imi Admin · lore

Re: Problem with credential.helper=store in git 2.32.0.windows.2

Hi Sebastian,
On Thu, 6 Jan 2022, Imi Admin wrote:
Show 25 quoted lines
> Here's my local git configuration:
>
> PS C:\scripts> git config -l --show-origin
> [...]
> file:C:/Program Files/Git/etc/gitconfig	credential.helper=manager-core
> file:C:/Program Files/Git/etc/gitconfig	credential.https://dev.azure.com.usehttppath=true
> file:C:/Program Files/Git/etc/gitconfig	init.defaultbranch=master
> file:.git/config	core.repositoryformatversion=0
> file:.git/config	core.filemode=false
> file:.git/config	core.bare=false
> file:.git/config	core.logallrefupdates=true
> file:.git/config	core.symlinks=false
> file:.git/config	core.ignorecase=true
> file:.git/config	remote.origin.url=https://mygitlab.de/mygroup/myrepo.git
> file:.git/config	remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
> file:.git/config	branch.master.remote=origin
> file:.git/config	branch.master.merge=refs/heads/master
> file:.git/config	user.name=myname
> file:.git/config	user.email=my@email
> file:.git/config	credential.helper=store --file C:/scripts/.git/.git-credentials
>
> [...]
>
> Anyway as far as i understood git should not exec git-credential-manager-core
> get at all with my local git configuration?

You need one additional thing to make that happen. As per https://git-scm.com/docs/git-config#Documentation/git-config.txt-credentialhelper:

	Note that multiple helpers may be defined. See gitcredentials[7]
	for details and examples.

And in https://git-scm.com/docs/gitcredentials#_configuration_options, we read:

	If there are multiple instances of the credential.helper
	configuration variable, each helper will be tried in turn, and may
	provide a username, password, or nothing. Once Git has acquired
	both a username and a password, no more helpers will be tried.
	If credential.helper is configured to the empty string, this
	resets the helper list to empty (so you may override a helper set
	by a lower-priority config file by configuring the empty-string
	helper, followed by whatever set of helpers you would like).

So you need to insert a line "helper =` (with an empty value) in your .git/config's `[credential]` section:

	[credential]
		# reset 'credential.helper' list
		helper =
		helper = "store --file C:/scripts/.git/.git-credentials"

Ciao, Johannes

Sebastian Richter· Jan 10, 2022, 07:58 UTC · re: Johannes Schindelin · lore

Re: Problem with credential.helper=store in git 2.32.0.windows.2

Hi Johannes,

thanks for clarifying this. I'm using 'git config --system --unset credential.helper' before setting the file store in the local configuration now and it works.

Best Sebastian
Am 09.01.2022 22:53, schrieb Johannes Schindelin:
Show 63 quoted lines
> Hi Sebastian,
> 
> On Thu, 6 Jan 2022, Imi Admin wrote:
> 
>> Here's my local git configuration:
>> 
>> PS C:\scripts> git config -l --show-origin
>> [...]
>> file:C:/Program Files/Git/etc/gitconfig	credential.helper=manager-core
>> file:C:/Program 
>> Files/Git/etc/gitconfig	credential.https://dev.azure.com.usehttppath=true
>> file:C:/Program Files/Git/etc/gitconfig	init.defaultbranch=master
>> file:.git/config	core.repositoryformatversion=0
>> file:.git/config	core.filemode=false
>> file:.git/config	core.bare=false
>> file:.git/config	core.logallrefupdates=true
>> file:.git/config	core.symlinks=false
>> file:.git/config	core.ignorecase=true
>> file:.git/config	remote.origin.url=https://mygitlab.de/mygroup/myrepo.git
>> file:.git/config	remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
>> file:.git/config	branch.master.remote=origin
>> file:.git/config	branch.master.merge=refs/heads/master
>> file:.git/config	user.name=myname
>> file:.git/config	user.email=my@email
>> file:.git/config	credential.helper=store --file 
>> C:/scripts/.git/.git-credentials
>> 
>> [...]
>> 
>> Anyway as far as i understood git should not exec 
>> git-credential-manager-core
>> get at all with my local git configuration?
> 
> You need one additional thing to make that happen. As per
> https://git-scm.com/docs/git-config#Documentation/git-config.txt-credentialhelper:
> 
> 	Note that multiple helpers may be defined. See gitcredentials[7]
> 	for details and examples.
> 
> And in https://git-scm.com/docs/gitcredentials#_configuration_options, 
> we
> read:
> 
> 	If there are multiple instances of the credential.helper
> 	configuration variable, each helper will be tried in turn, and may
> 	provide a username, password, or nothing. Once Git has acquired
> 	both a username and a password, no more helpers will be tried.
> 
> 	If credential.helper is configured to the empty string, this
> 	resets the helper list to empty (so you may override a helper set
> 	by a lower-priority config file by configuring the empty-string
> 	helper, followed by whatever set of helpers you would like).
> 
> So you need to insert a line "helper =` (with an empty value) in your
> .git/config's `[credential]` section:
> 
> 	[credential]
> 		# reset 'credential.helper' list
> 		helper =
> 		helper = "store --file C:/scripts/.git/.git-credentials"
> 
> Ciao,
> Johannes
-- 
Hochschule für Technik und Wirtschaft
Wilhelminenhofstr. 75A
12459 Berlin
Gebäude C Raum 538
tel 030 5019 2945
fax 030 5019 48 2945
mail richter@htw-berlin.de
Johannes Schindelin· Jan 10, 2022, 12:52 UTC · re: Sebastian Richter · lore

Re: Problem with credential.helper=store in git 2.32.0.windows.2

Hi Sebastian,
On Mon, 10 Jan 2022, Sebastian Richter wrote:
> thanks for clarifying this. I'm using 'git config --system --unset
> credential.helper' before setting the file store in the local configuration
> now and it works.

I am not quite sure whether that is a good solution. You are changing the system configuration for the benefit of a local configuration. That would potentially break every other user outside of that repository that now works.

My suggestion is to either go with my earlier recommendation and add an empty `credential.helper` in the repository's config before the actual one (and leave the system config alone), or alternatively change the system config instead of the repository config in the first place.

Ciao, Johannes

Sebastian Richter· Jan 10, 2022, 14:03 UTC · re: Johannes Schindelin · lore

Re: Problem with credential.helper=store in git 2.32.0.windows.2

Hi Johannes,

you are right, but during my (cluster) ssh connections no one else uses my systems (hopefully), and i do restore the system file afterwards.

But i'll implement your approach in the next script version.
Thanks & best Sebastian
Am 10.01.2022 13:52, schrieb Johannes Schindelin:
Show 24 quoted lines
> Hi Sebastian,
> 
> On Mon, 10 Jan 2022, Sebastian Richter wrote:
> 
>> thanks for clarifying this. I'm using 'git config --system --unset
>> credential.helper' before setting the file store in the local 
>> configuration
>> now and it works.
> 
> I am not quite sure whether that is a good solution. You are changing 
> the
> system configuration for the benefit of a local configuration. That 
> would
> potentially break every other user outside of that repository that now
> works.
> 
> My suggestion is to either go with my earlier recommendation and add an
> empty `credential.helper` in the repository's config before the actual 
> one
> (and leave the system config alone), or alternatively change the system
> config instead of the repository config in the first place.
> 
> Ciao,
> Johannes
-- 
Hochschule für Technik und Wirtschaft
Wilhelminenhofstr. 75A
12459 Berlin
Gebäude C Raum 538
tel 030 5019 2945
fax 030 5019 48 2945
mail richter@htw-berlin.de

← back to recent threads