如何用git pull输入密码命令?

时间:2012-07-16 14:10:00

标签: git bash command

我想在一行中执行此命令:

git pull && [my passphrase]

怎么做?

10 个答案:

答案 0 :(得分:127)

这不完全是您要求的,但对于http(s):

  • 您可以将密码放在.netrc文件中(_netrc on windows)。从那里它将被自动拾取。它将以600权限转到您的主文件夹。
  • 你也可以用https://user:pass@domain/repo克隆回购,但这不是真的推荐,因为它会在很多地方展示你的用户/通行证......
  • 新选项是使用credential helper。请注意,凭据将使用标准凭据帮助程序以明文形式存储在本地配置中。 wincred的credential-helper也可以在windows上使用。

凭证助手的使用示例

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

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

答案 1 :(得分:92)

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

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

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

答案 2 :(得分:30)

不直接回答这个问题,但是我在搜索基本上每次拉动远程服p>

好吧,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)

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

答案 3 :(得分:6)

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

答案 4 :(得分:4)

请注意git凭证助手"存储"的方式将store the unencrypted passwords随Git 2.5+(2014年第2季度)发生变化 请commit 17c7f4d

查看Junio C Hamano (gitster)
  

credential-xdg

     

调整样本" store"证书助手的后端,以便在指定时尊重XDG配置文件位置。

医生现在说:

  

如果未指定:

     
      
  • 将从~/.git-credentials$XDG_CONFIG_HOME/git/credentials以及
  • 搜索凭据   
  • 凭据将写入~/.git-credentials(如果存在),或$XDG_CONFIG_HOME/git/credentials(如果存在且前者不存在)。
  •   

答案 5 :(得分:2)

使用凭据帮助程序命令行option

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

答案 6 :(得分:2)

我刚刚经历了这个,所以在我最终使用 Gitlab access tokens 时提供了我的答案,尽管有些人可能需要 Github access tokens

我更喜欢使用 SSH,但有一个 gitlab 错误阻止了它。将我的密码放在 .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

答案 7 :(得分:1)

您可以只使用用户名,而无需使用密码,因为git bash会提示输入密码。

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

答案 8 :(得分:1)

如果要在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

我非常确定它使用的令牌是临时令牌/每作业令牌-这样,此方法的安全漏洞就会大大减少。

答案 9 :(得分:0)

搜索Google和stackoverflow一段时间后,我没有找到问题的答案,所以我想在这里分享我的解决方案。

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做过。 Full answer here