我正在使用git-scm并试图推送到存储库。在这样做的时候,我收到了以下消息:
fatal: unable to get credential storage lock: File exists
虽然推送最终成功推进,但我想知道为什么会出现这个错误。它仍在这样做,之前没有这样做过。任何帮助表示赞赏。谢谢!
答案 0 :(得分:30)
我今天遇到了同样的问题。事实证明,我以某种方式为credential.helper配置了两个配置。使用git config --list
检查您是否拥有多个 credential.helper =“XXX”。
就我而言,我在全局配置中使用了credential.helper = manager,在本地配置中使用了credential.helper = store。
我删除了 path-to-git-project / .git / config 中的本地文件并解决了问题。
答案 1 :(得分:6)
尝试在不使用--global
的情况下配置您的凭证助手git config credential.helper wincred
答案 2 :(得分:4)
错误消息来自git credential-store
(click for documentation page)。它表示凭据存储程序的另一个实例当前正在运行,并锁定了(不安全地,以纯文本格式)存储密码的文件。
如果git credential-store
的其他实例实际上没有运行,那么锁定文件无疑会从之前的运行中遗留下来,您只需将其删除即可。遗憾的是,该程序未能告诉您特定凭证文件的位置(但请参阅可能位置的文档)。
答案 3 :(得分:1)
我很难搞清楚锁文件的位置。
在Linux上,只需使用strace
,但不要忘记使用-f
选项跟踪子进程:
strace -f -eopen git credential-store --file=~/mystore store < creds
open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libpcre.so.3", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libresolv.so.2", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
open("/dev/null", O_RDWR) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_CLOEXEC) = 3
open("/home/g179531/.gitconfig", O_RDONLY) = 3
Process 8269 attached
[pid 8269] open("/etc/ld.so.cache", O_RDONLY|O_CLOEXEC) = 3
[pid 8269] open("/lib/x86_64-linux-gnu/libpcre.so.3", O_RDONLY|O_CLOEXEC) = 3
[pid 8269] open("/lib/x86_64-linux-gnu/libz.so.1", O_RDONLY|O_CLOEXEC) = 3
[pid 8269] open("/lib/x86_64-linux-gnu/libpthread.so.0", O_RDONLY|O_CLOEXEC) = 3
[pid 8269] open("/lib/x86_64-linux-gnu/libc.so.6", O_RDONLY|O_CLOEXEC) = 3
[pid 8269] open("~/mystore.lock", O_RDWR|O_CREAT|O_EXCL, 0666) = -1 ENOENT (No such file or directory)
fatal: unable to get credential storage lock: No such file or directory
[pid 8269] +++ exited with 128 +++
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=8269, si_status=128, si_utime=0, si_stime=0} ---
+++ exited with 128 ++
程序在打印错误之前尝试打开的最后一个文件是锁定文件。就我而言,它是~/mystore.lock
。
答案 4 :(得分:1)
这是在Window上为我解决问题的原因:
我运行git config --list --show-origin
并找到所有credential.helper = XXX配置,然后转到包含那些.gitconfig文件的所有目录,并将该设置更改为credential.helper = store
此外,您的本地配置也应该是helper = manager:转到.git / config并添加/修改此行,如下所示:
[credential]
helper = manager
答案 5 :(得分:0)
在我的Windows案例中,我的c:\ users \ xxxx目录中添加了一个git凭据.lock,其中所有全局git配置都存在。
我删除了锁定文件,该文件还删除了以明文
存储密码的git凭证文件答案 6 :(得分:0)
执行 C:\ Program Files \ Git \ mingw64 \ libexec \ git-core> git-credential-manager.exe删除
答案 7 :(得分:0)
答案 8 :(得分:0)
我按照此线程中之前列出的说明执行此命令:git config --list --show-origin
,之后它会显示 git 具有任何类型配置的位置,如下所示:file:"C:\ProgramData/Git/ config" , "file:C:/Users/User/.gitconfig" , "file:.git/config"。
然后我深入文件夹 file:C:/Users/User/ 并删除名为:.git-credentials.lock 的文件,然后再次执行“git pull origin branch”,它工作了!!