我想在GitExtensions、Sourcetree或任何其他GitGUI中自动使用推拉,每次都不需要在提示中输入用户名和密码。

那么我如何在Git中保存我的凭据?


当前回答

要将用户名和用户密码保存到github帐户中,只需按顺序运行这些命令。

git config --global user.name "userName"
git config --global user.email "usernam@gmail.com"
git config --global user.password "userPassword"
git config --global credential.helper store
git config --list --show-origin

然后使用以下命令生成密钥:

ssh-keygen -t rsa -C "useremail@gmail.com"

注意:复制创建id_rsa文件的文件位置然后转到该文件位置-->打开gitbash或命令提示符-->运行命令-cat id_rsa.pub

将显示SSH密钥,复制此SSH密钥并将其粘贴到gihub/gitlab帐户中

其他回答

以前的答案对我来说都不管用。每次我想取东西或拉东西时,我都会得到以下答案:

输入密钥“/Users/myusername/.ssh/id_rsa”的密码:


适用于Mac

我可以通过以下方式阻止它询问我的密码:

通过运行:vi~/.ssh/config打开config添加了以下内容:UseKeychain yes保存并退出:按Esc,然后输入:wq!


对于Windows

我能够使用此Stack Exchange帖子中的信息使其发挥作用:如何避免每次推到Bitbucket时被询问密码

对于Windows用户,请查看.gitconfig文件并检查为凭据助手配置了什么。如果您有以下内容。。。

[凭证“helperselector”]selected=绞车

您将在Windows凭据管理器中找到凭据。

您可以在那里编辑凭证。

注意:Wincred已被弃用,请参阅。。。

https://github.com/Microsoft/Git-Credential-Manager-for-Windows#notice-该项目不再处于警告状态

因此,您可能需要重新配置Git以使用内置的Git凭据管理器。。。

git config --global credential.helper manager

您可以使用gitconfig在git中启用凭据存储。

git config --global credential.helper store

运行此命令时,当您第一次从远程存储库中拉入或推送时,会询问您的用户名和密码。

之后,对于与远程存储库的后续通信,您不必提供用户名和密码。

存储格式为.git凭据文件,以明文形式存储。

此外,您还可以为git-configcredential.helper使用其他助手,即内存缓存:

git config credential.helper 'cache --timeout=<timeout>'

它采用可选的超时参数,确定凭证将在内存中保留多长时间。使用帮助器,凭据将永远不会接触磁盘,并且在指定的超时后将被擦除。默认值为900秒(15分钟)。


警告:如果使用此方法,您的Git帐户密码将以明文格式保存在global.gitconfig文件中,例如在Linux中,它将是/home/[用户名]/.gitconfig。

如果您不希望这样做,请为您的帐户使用ssh密钥。

您的问题:

我想在GitExtensions、Sourcetree或任何其他GitGUI中自动使用推拉,而每次都不需要在提示中输入用户名和密码。那么我如何在Git中保存我的凭据?

如果您是github或其他提供商,我建议不要将它们保存在Git中,例如~/.Git凭据,而是将它们视为加密的机密。

将凭据设置为以下格式:

https://your_user_name:your_token@github.com/your_user_name/your_repo_name.git

将其作为加密机密,如secrets.REPOSTORY:

然后,您可以使用它来克隆公共或私有回购及其子模块,以及自动执行推拉操作

# put the credentials in a variable
export REPOSITORY=${{ secrets.REPOSITORY }}

# git clone public or private repos
git clone --recurse-submodules -j8 ${REPOSITORY}

# git pull will do automatic
cd /path/to/the/repo
git pull

# git push to a branch in the repo
git add . && \
  git commit -m "Action from ${GITHUB_SHA}" && \
  git push --force $REPOSITORY master:$BRANCH

在完整阅读了答案并尝试了这个问题的大部分答案之后,我终于找到了适合我的过程。我想分享它,以防有人不得不处理一个复杂的用例,但仍然不想像我一样浏览所有答案和gitcredentials、gitcredential store等手册页。

如果你(像我一样)必须使用几个不同的用户名/密码组合来处理来自多个提供商(GitLab、GitHub、Bitbucket等)的多个存储库,请在下面找到我建议的步骤。如果您只有一个帐户可以使用,那么最好使用git-config--globalcredential.helperstore或git-config--globaluser.name“您的用户名”等解决方案,这些解决方案在前面的回答中已经得到了很好的解释。

我的解决方案:

取消设置全局凭据帮助器,以防以前的一些实验阻碍:)git-config--全局--取消设置凭据s.helper移动到repo的根目录并禁用本地凭据助手(如果需要)cd/path/to/my/repogit-config--取消设置凭据帮助程序`创建一个文件以将回购凭证存储到git-config credential.helper“存储--文件~/.git_repo_credentials”注意:此命令在您的主目录中创建一个名为“.git_repo_credentials”的新文件,git将您的凭据存储到该文件中。如果不指定文件名,Git将使用默认的“.Git_credentials”。在这种情况下,只需发出以下命令即可:git-config credential.helper存储设置您的用户名git配置凭据。*.username my_user_name注意:如果您的存储库来自同一个提供商(例如GitLab),通常可以使用“*”。如果您的存储库由不同的提供程序托管,那么我建议为每个存储库显式设置到提供程序的链接,如下面的示例(对于GitLab):git配置凭据。https://gitlab.com.username我的用户名(_U)

此时,如果发出需要凭据的命令(例如git pull),将要求您输入与“my_user_name”对应的密码。这只需要一次,因为git将凭据存储到“.git_repo_credentials”中,并在后续访问时自动使用相同的数据。