如何在WSL上使用Git凭证存储(Windows上的Ubuntu)?

时间:2017-08-28 19:18:40

标签: git ubuntu windows-subsystem-for-linux

我已尝试按照以下说明操作:https://stackoverflow.com/a/40312117/21728基本上这样做:

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

但是当我进行任何网络操作时,我收到此错误:

** (process:7902): CRITICAL **: could not connect to Secret Service: Cannot autolaunch D-Bus without X11 $DISPLAY

我认为这是合乎逻辑的,因为确实没有X11显示器。

如何在Windows(WSL)上的Ubuntu上使Git凭据缓存工作?

7 个答案:

答案 0 :(得分:30)

如果您安装了Git for Windows,则系统上会安装Windows集成凭据管理器。

您可以从WSL运行Windows可执行文件here

要使用它,您可以运行以下命令(假设您的git for Windows安装在C:\ Tools \ Git上)

git config --global credential.helper "/mnt/c/Tools/Git/mingw64/libexec/git-core/git-credential-manager.exe"

答案 1 :(得分:16)

TL; DR

我已经创建了a script that does this for you。我在厨师编排中使用它。

找到或安装git-credential-manager.exe

  1. 打开cmd.exe并致电where git-credential-manager.exe
    • 如果返回路径,则为GREAT。继续转换路径。
    • 如果没有...
  2. cmd.exe中致电where git.exe
    • 如果未返回路径,则下一步是仅安装凭据管理器
    • 如果确实返回路径,则类似于:
    • C:\Program Files\Git\cmd\git.exe
    • 让所有内容都放在下一个斜杠之后,并进行如下更改:
    • C:\Program Files\Git\mingw64\libexec\git-core\git-credential-manager.exe
    • 如果存在,那就很棒。继续转换路径。
    • 否则...
  3. Microsoft's git repo安装凭据管理器,然后再次使用where获取路径。

将路径从DOS转换为Linux

我们需要:

  1. C:\替换为/mnt/c/
  2. 将斜杠从\切换到/
  3. 带有双反斜杠\\的转义符(如果有的话,还有括号)

所以...

  • "C:\Program Files\Git\mingw64\libexec\git-core\git-credential-manager.exe"变成...
  • "/mnt/c/Program\\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"

配置git

  1. bash中致电git config --global credential.helper "<converted/path>"

答案 2 :(得分:13)

使用Windows 10和“WSL”,我创建了一个〜/ .gitconfig文件,但错误地将[credential]部分标签输入为[凭证]。 我尝试运行git凭证填充,然后将其输出提供给git凭证批准,这可能有效,但我怀疑不是因为它说“usage:git credential [fill | approve | reject]”。 最后,我只是跑了:

$ git config --global credential.helper cache

然后做了一个git pull;当提示输入用户和密码时,我像往常一样输入它们。在那之后,它记住了它。我发现它已将(正确命名的)部分添加到我的〜/ .gitconfig:

[credential]
        helper = cache

我编辑了它以提供更长的超时时间:

[credential]
        helper = cache --timeout=144000

现在这一切似乎都运转良好。

答案 3 :(得分:4)

到目前为止,所有答案都过于复杂。而且 git 文档并没有真正的帮助,他们喜欢参考资料很多,所以你需要按照 2-3 个链接来获取你需要的信息!

  1. 您不需要将 Windows git.exe 与 WSL 一起使用!使用 linux git sudo apt install git-all(我认为它预装在 Ubuntu 中)。
  2. 然后您只需按照 https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage 中的说明进行操作即可。

总结

git 默认支持 2 种方法。要查看您安装了哪些方法,请执行以下命令:

git help -a | grep credential

我的结果是:

   credential           Retrieve and store user credentials
   credential-cache     Helper to temporarily store passwords in memory
   credential-store     Helper to store credentials on disk

如何缓存和存储:

cache

@selkieTG 在他们的回答中涵盖了这一点,包括完整性......

git config --global credential.helper "cache --timeout 30000"

会将您的密码/令牌缓存 30,000 秒(8 小时 20 分钟)

store

git config --global credential.helper "store"

将在 ~/.git-credentials 中存储纯文本密码/令牌。

纯文本?!!对于 WSL,我完全可以在这里使用纯文本。我输入凭据以运行我的 Windows 计算机,然后输入凭据以登录 WSL2。我需要隐藏这些吗?不是真的,它在我的开发箱上更方便。

manager-core

如果您真的想使用 manager-core,您可以将它安装在您的 Ubuntu version 中。然后使用它。

答案 4 :(得分:2)

alias git=git.exe

将简单地使用Windows中的git.exe及其配置

答案 5 :(得分:0)

我最近更新到WSL2,在我的情况下,以下操作无效:

"/mnt/c/Program\\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"

起作用的是以下内容: git config --global credential.helper "/c/Program\\ Files/Git/mingw64/libexec/git-core/git-credential-manager.exe"

直到我从出现“未找到”错误的路径中删除了/mnt/

根据我的调查,在干净启动Windows之后,在WSL2中安装Windows驱动器存在问题,更多详细信息,请参见: https://github.com/microsoft/WSL/issues/4122 这是我的情况中最可能的原因。

另一个原因可能是/etc/wsl.conf中的根目录配置错误

答案 6 :(得分:0)

无法在带有 Debian 的 WSL2 上与 git-credential-manager.exe 一起使用。我总是会得到 remote: Repository not found.,没有进一步的错误。
相反,我对 git-credential-manager-core.exe 做了同样的事情,所以我的配置现在是 credential.helper=/mnt/c/Program\ Files/Git/mingw64/libexec/git-core/git-credential-manager-core.exe。这立即奏效,事先在 Windows 上设置了 GitHub 2FA/PAT。

我有以下 git 版本:

  • 窗户:
    git 版本 2.31.0.windows.1
    Windows 版 Git 凭证管理器 v1.20.0.0
  • Debian/WSL2
    git 版本 2.30.2