如何输入命令与密码的 git 拉?

我想在一行中执行这个命令:

git pull && [my passphrase]

怎么做?

425406 次浏览

这并不完全是您所要求的,而是 http (s) :

  • 你可以输入密码。Netrc 文件(_ netrc on windows)。从那里它将被自动拾起。它将进入您的主文件夹与600权限。
  • 你也可以只克隆回购与 https://user:pass@domain/repo,但这并不是真的建议,因为它会显示您的用户/通行证在很多地方..。
  • 一个新的选项是使用 证书助手。请注意,使用标准凭据助手,凭据将以明文形式存储在本地配置中。也可以在窗口上使用具有 wincred 的凭据助手。

凭据助手的使用示例

  • git config credential.helper store-无限期地存储凭据。
  • git config credential.helper 'cache --timeout=3600'-存储60分钟

对于基于 ssh 的访问,可以使用 ssh 代理,在需要时提供 ssh 密钥。这将需要在计算机上生成密钥,将公钥存储在远程服务器上,并将私钥添加到相关密钥存储库中。

请注意,Git 凭证助手“ store”将随着 Git 2.5 + (2014年第二季度)而改变 存储未加密的密码的方式。
请参见 Junio C Hamano (gitster)的 犯下17c7f4d

credential-xdg

调整凭据帮助程序的示例“ store”后端,以便在指定时尊重 XDG 配置文件位置。

医生现在说:

如未注明:

  • 凭据将从 ~/.git-credentials$XDG_CONFIG_HOME/git/credentials中搜索,并且
  • 凭证将写入 ~/.git-credentials,如果它存在,或 $XDG_CONFIG_HOME/git/credentials,如果它存在,前者不存在。

我找到了一种在命令行上为 https 连接提供凭据的方法。您只需指定 git pull 的完整 URL,并在其中包含凭据:

git pull https://username:password@mygithost.com/my/repository

之前不需要使用凭据克隆存储库,这意味着凭据不会最终出现在 .git/config中。(但是要确保您的 shell 不会出卖您,并将命令行存储在历史文件中。)

没有直接回答这个问题,但我发现这个问题时,寻找一种方法,基本上,而不是每次打开远程服务器时都重新输入密码

git允许您在有限的时间内缓存凭据。它在 git config中是可定制的,这个页面很好地解释了它:

Https://help.github.com/articles/caching-your-github-password-in-git/#platform-linux

在终端机中,运行:

$ git config --global credential.helper cache
# Set git to use the credential memory cache

要自定义缓存超时,您可以这样做:

$ git config --global credential.helper 'cache --timeout=3600'
# Set the cache to timeout after 1 hour (setting is in seconds)

然后您的凭据将在内存中存储所请求的时间。

下面的 cmd 将工作,如果我们没有@in 密码: git pull https://username:pass@word@mygithost.com/my/repository 如果您有@in 密码,则将其替换为% 40,如下所示: git pull https://username:pass%40word@mygithost.com/my/repository

您可以只使用用户名,不需要使用密码,因为密码将在 git bash 中提示。

git pull https://username@github.com/username/myrepo

或者

 git pull https://username@github.com/myrepo

如果您希望在 Gitlab (gitlab-ci.yml)上使用 CI/CD 脚本完成此操作,您可以使用

git pull $CI_REPOSITORY_URL

也就是说:

git pull https://gitlab-ci-token:[MASKED]@gitlab.com/gitlab-examples/ci-debug-trace.gi

而且我很确定它使用的令牌是一个临时的/每个作业令牌-所以这种方法的安全漏洞大大减少了。

使用凭据助手命令行 选择:

git -c credential.helper='!f() { echo "password=mysecretpassword"; }; f' fetch origin

我没有找到我的问题的答案后,搜索谷歌 & 堆栈溢出一段时间,所以我想在这里分享我的解决方案。

git config --global credential.helper "/bin/bash /git_creds.sh"
echo '#!/bin/bash' > /git_creds.sh
echo "sleep 1" >> /git_creds.sh
echo "echo username=$SERVICE_USER" >> /git_creds.sh
echo "echo password=$SERVICE_PASS" >> /git_creds.sh


# to test it
git clone https://my-scm-provider.com/project.git

我也是为了 Windows

我只是通过这个,所以提供我的答案,因为我最终使用 Gitlab 访问令牌,虽然有些可能需要 Github 访问令牌

我更愿意使用 SSH,但是有一个 gitlab bug 阻止了这一点。输入我的密码。Netrc 或 URL 不理想。证书管理器需要重新启动服务器重新启动,这是不理想的。

因此,我选择了一个访问令牌,它可以像这样使用: git clone https://<username>:<accessToken>@gitlab.com/ownerName/projectName.git

访问令牌与 URL 一起存储,所以这不安全,但是它比使用 username: password 更安全,因为访问令牌可以限制在某些操作中,并且可以很容易地撤销。

一旦它被克隆下来(或者手动更新 URL) ,所有的 git 请求都将使用访问令牌,因为它存储在 URL 中。

如果您希望更新已经克隆的回购,这些命令可能会有所帮助:

git remote show origin


git remote remove origin


git remote add origin https://<username>:<accessToken>@gitlab.com/ownerName/projectName.git

编辑: 一定要检查下面的评论。我添加了2个重要的注释。

我只是使用了下面的命令,并使用了 git pull和 git 问我 usernamepassword

第一:

git config credential.helper store

然后:

git pull