如何在GIT中保存用户名和密码?

时间:2016-03-11 14:29:37

标签: git credentials git-config

我想在 GitExtension 中自动使用推送和拉取,而不是每次都在提示符中输入我的用户和密码。

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

24 个答案:

答案 0 :(得分:1072)

运行

git pull

然后

git pull

提供用户名和密码,稍后将记住这些详细信息。凭证存储在磁盘上的文件中,磁盘权限为"只是用户可读/可写"但仍然是明文。

如果您想稍后更改密码

~/.git-credentials

将失败,因为密码不正确,git然后从git pull 文件中删除有问题的用户+密码,所以现在重新运行

function my_function()
{
}

function my_function
{
}

my_function()
{
}

提供新密码,以便作为收件人使用。

答案 1 :(得分:186)

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

git config --global credential.helper store

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

之后,为了与远程存储库进行后续通信,您不必提供用户名和密码。

存储格式是.git-credentials文件,以纯文本格式存储。

此外,您可以使用git config credential.helper的其他帮助程序,即内存缓存:

git config credential.helper cache <timout>

采用可选的timeout parameter,确定其守护程序应运行多长时间,其default值为900 seconds (15 minutes).

警告:如果您使用此方法,您的git帐户密码将以plaintext格式保存在global .gitconfig file中,例如在linux中将{{1} }}

如果您不喜欢这样做,请改为使用/home/[username]/.gitconfig作为您的帐户。

答案 2 :(得分:73)

打开凭证帮助程序,以便Git将密码保存在内存中一段时间​​:

在终端中,输入以下内容:

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

默认情况下,Git会将您的密码缓存15分钟。

要更改默认密码缓存超时,请输入以下内容:

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

来自GitHub Help

答案 3 :(得分:65)

您可以这样设置用户名和密码:

git config --global user.name "your username"

git config --global user.password "your password"

答案 4 :(得分:28)

您可以将~/.gitconfig文件编辑为存储 凭据

sudo nano ~/.gitconfig

哪个应该已经

[user]
        email = your@email.com
        user = gitUSER

您应该在此文件的底部添加。

[credential]
        helper = store

我推荐此选项的原因是因为它是全局的,如果您在任何时候需要删除该选项,您知道该去哪里并进行更改。

仅在您的个人计算机中使用此选项。

然后当你拉|克隆|输入git密码,一般情况下,密码将以~/.git-credentials格式保存为

https://GITUSER:GITPASSWORD@DOMAIN.XXX

WHERE DOMAIN.XXX可能是GITHUB.COM | BITBUCKET.ORG | OTHER

请参阅Docs

重新启动终端。

答案 5 :(得分:13)

您可以使用git-credential-store将未加密的密码存储在磁盘上,仅受文件系统权限的保护。

示例

$ git config credential.helper store
$ git push http://example.com/repo.git
Username: <type your username>
Password: <type your password>

[several days later]
$ git push http://example.com/repo.git
[your credentials are used automatically]

您可以检查文件~/.git-credentials中存储的凭据

有关更多信息,请访问 git-credential-store - Helper to store credentials on disk

答案 6 :(得分:13)

对于全局设置,请从任何位置打开终端 运行以下命令:

  git config --global user.name "your username"
  git config --global user.password "your password"

通过计算机上的任何本地git repo都将使用该信息。

您可以通过以下操作为每个存储库分别进行配置:

  • 在repo文件夹中打开终端。
  • 运行以下命令:

    git config user.name "your username"
    git config user.password "your password"
    

它仅影响该文件夹(因为您的配置是本地的)。

答案 7 :(得分:12)

如果使用SSH身份验证而不是用户名/密码身份验证,则会更安全。

如果您使用的是Mac,则会将SSH客户端身份验证集成到MacOS钥匙串中。创建SSH密钥后,键入终端:

Microsoft.WindowsAzure

这会将SSH私钥添加到MacOS钥匙串中。 git客户端在连接到远程服务器时将使用ssh。只要您在服务器上注册了ssh公钥,就可以了。

答案 8 :(得分:12)

只需将Ya凭据放入Url中,如下所示:

  

https://Username Password @ github.com/myRepoDir/myRepo.git

您可以像这样存储

  

git remote add myrepo https://Userna...

... 使用它的示例:

  

git push myrepo master


现在要列出网址别名:

git remote -v

...以及删除其中一个的命令:

git remote rm myrepo

答案 9 :(得分:12)

我认为缓存凭据比永久存储更安全:

git config credential.helper 'cache --timeout=10800'

现在您可以输入用户名和密码(git pull或...),并在接下来的3小时内继续使用git。

好又安全。

超时以秒为单位(在示例中为3小时)。

此命令必须在Git存储库中执行,但是您也可以通过添加--global参数在全局范围内进行此更改,如下所示:

git config --global credential.helper 'cache --timeout=10800'

答案 10 :(得分:10)

在这种情况下,您需要使用git凭据助手来通过以下命令行告诉git记住您的GitHub密码和用户名:

├── src
│   ├── components                 // Dumb components should go here -> they should be stand-alone components
│   │   ├── App                    // App should should render all the main topics
│   │   │   ├── index.js           // Component logic and jsx
│   │   │   ├── index.test.js      // Component tests
│   │   │   ├── index.css          // Component styles
│   │   ├── Header                   // All components should have their own index.js and index.test.js files
│   │   │   ├── index.js           // Component logic and jsx
│   │   │   ├── index.test.js      // Component tests
│   │   │   ├── index.css          // Component styles
│   │   ├── MainTopic              // MainTopic should be a component on its own because it's repeated. It's in an array.
│   │   │   ├── index.js           // Component logic and jsx
│   │   │   ├── index.test.js      // Component tests
│   │   │   ├── index.css          // Component styles
│   │   ├── SubTopic               // SubTopic should be a component on its own because it's repeated. It's in an array.
│   │   │   ├── index.js           // Component logic and jsx
│   │   │   ├── index.test.js      // Component tests
│   │   │   ├── index.css          // Component styles
│   │   ├── Topic                  // Topic should be a component on its own because it's repeated. It's in an array.
│   │   │   ├── index.js           // Component logic and jsx
│   │   │   ├── index.test.js      // Component tests
│   │   │   ├── index.css          // Component styles
│   ├── index.test.js              // Tests for non-components files
│   ├── index.js
│   ├── routes.js                  // All routes should be registered here

如果您使用的是使用SSH密钥的回购协议,则需要SSH密钥进行身份验证。

答案 11 :(得分:9)

以上所有答案对我都没有作用。每当我想fetchpull时,我都会得到以下信息:

Enter passphrase for key '/Users/myusername/.ssh/id_rsa':


对于Macs

我能够阻止它通过以下方式询问密码:

  1. 运行以下命令打开配置:vi ~/.ssh/config
  2. 添加了以下内容:UseKeychain yes
  3. 保存并退出:按 Esc ,然后输入:wq!

对于Windows

我能够使用此stackexchange中的信息使其工作: https://unix.stackexchange.com/a/12201/348665

答案 12 :(得分:6)

如果您在Windows上使用 Git凭据管理器 ...

git config -l应该显示:

credential.helper=manager

但是,如果没有提示您输入凭据,请按照以下步骤操作:

  1. 从“开始”菜单打开控制面板
  2. 选择用户帐户
  3. 在左侧菜单中选择管理您的凭据
  4. 删除与Git或GitHub相关的所有凭据

如果拥有代理并且Git服务器位于内部网络上,还请确保您未设置HTTP_PROXYHTTPS_PROXYNO_PROXY环境变量。< / p>

您还可以使用git-gui测试Git提取/推/拉,该链接到C:\Users\<username>\AppData\Local\Programs\Git\mingw64\libexec\git-core中的凭证管理器二进制文件

答案 13 :(得分:5)

查看官方git文档:

如果您使用SSH传输方式连接到远程服务器,则可能 让您拥有一个没有密码短语的密钥,这使您能够 安全地传输数据,而无需输入您的用户名和密码。 但是,HTTP协议无法做到这一点–每一种 连接需要用户名和密码。这变得更加困难 具有双重身份验证的系统,其中您用于 密码是随机生成的,不能发音。

幸运的是,Git有一个凭证系统可以帮助您解决这个问题。吉特 框中提供了一些选项:

  • 默认为完全不缓存。每个连接都会提示您 输入您的用户名和密码。

  • “缓存”模式将凭据在内存中保留一定时间 时间。没有密码曾经存储在磁盘上,并且它们是 15分钟后从缓存中清除。

  • “存储”模式将凭据保存到磁盘上的纯文本文件中, 他们永不过期。这意味着除非您更改密码 对于Git主机,您将无需输入凭据 再次。这种方法的缺点是您的密码已存储 以明文形式存储在主目录中的纯文件中。

  • 如果您使用的是Mac,则Git带有“ osxkeychain”模式,该模式 将凭证缓存在您的安全钥匙串中 系统帐户。此方法将凭据存储在磁盘上,并且它们 永不过期,但是它们使用与存储相同的系统进行加密 HTTPS证书和Safari自动填充。

  • 如果您使用的是Windows,则可以安装名为“ Git”的帮助程序 Windows的凭据管理器。”这类似于“ osxkeychain” 上述帮助程序,但使用Windows凭据存储来 控制敏感信息。可以在以下位置找到 https://github.com/Microsoft/Git-Credential-Manager-for-Windows

您可以通过设置Git配置选择这些方法之一 值:

$ git config --global credential.helper cache

$ git config --global credential.helper store

https://git-scm.com/book/en/v2/Git-Tools-Credential-Storage

答案 14 :(得分:3)

全局保存用户名和密码

git config --global user.name "fname lname"
git config --global user.email "example@gmail.com"
git config --global user.password "secret"

获取特定设置,

git config --global --get user.name
git config --global --get user.email
git config --global --get user.password

获取所有 git 设置

git config --list --show-origin

答案 15 :(得分:3)

完整地阅读了该线程并尝试了该问题的大多数答案之后,我最终找到了适合我的过程。我想分享它,以防某人不得不处理一个复杂的用例,但又不想像我一样浏览整个线程以及gitcredentialsgitcredentials-store等手册页。

在以下过程中查找,我建议如果,您(像我一样)必须使用几种不同的用户名/密码组合来处理来自多个提供商(GitLab,GitHub,Bitbucket等)的多个存储库。如果您只使用一个帐户,那么最好使用git config --global credential.helper storegit config --global user.name "your username"等解决方案,这些解决方案在前面的答案中已经得到很好的解释。

我的解决方案:

  1. 未设置全局凭据帮助器,以防以前的实验成为障碍:)

> git config --global --unset credentials.helper

  1. 移动到存储库的根目录并禁用本地凭据帮助程序(如果需要)

> cd /path/to/my/repo

> git config --unset credential.helper

  1. 创建一个文件,将您的回购凭证存储到其中

> git config credential.helper 'store --file ~/.git_repo_credentials'

注意:此命令在您的主目录中创建一个名为“ .git_repo_credentials”的新文件,Git将您的凭据存储在该文件中。如果您未指定文件名,则Git使用默认的“ .git_credentials”。在这种情况下,只需发出以下命令即可:

> git config credential.helper store

  1. 设置您的用户名

git config credential.*.username my_user_name

注意:如果您的存储库来自同一提供商(例如GitLab),通常可以使用“ *”。相反,如果您的存储库由不同的提供程序托管,那么我建议为每个存储库显式设置指向提供程序的链接,如以下示例(对于GitLab):

git config credential.https://gitlab.com.username my_user_name

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

答案 16 :(得分:2)

将用户名和密码存储在.git-credentials中

.git-credentials是运行git config --global credential.helper store时存储用户名和密码(访问令牌)的位置,这是其他答案的提示,然后键入您的用户名和密码或访问令牌:

https://${username_or_access_token}:${password_or_access_token}@github.com

因此,为了保存用户名和密码(访问令牌):

git config —-global credential.helper store
echo “https://${username}:${password_or_access_token}@github.com“ > ~/.git-credentials

这对于github机器人非常有用,例如通过为不同分支制定规则来解决Chain automated builds in the same docker repository,然后通过在docker hub的post_push挂钩中将其推送来触发它。

在堆栈溢出中可以看到一个这样的示例here

答案 17 :(得分:2)

除了编辑~/.gitconfig文件之外。

请注意始终使用单引号

git config --global user.name 'your username'
git config --global user.password 'your password'

您的用户名和密码可能使用某些字符,如果使用双引号,则会破坏密码。

答案 18 :(得分:1)

只需使用

git config --global credential.helper store

并执行 git pull ,它将要求输入用户名和密码,从现在开始,它将不提供任何提示输入用户名和密码,它将存储详细信息

答案 19 :(得分:1)

对于Windows用户,如果您具有以下条件,请查看.gitconfig文件并检查已为凭据帮助程序配置了什么...

[凭证“ helperselector”] 选择= Wincred

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

enter image description here

您可以在其中编辑凭据。

编辑:Wincred已被弃用,请参阅...

https://github.com/git-for-windows/git-sdk-64/tree/main/mingw64/doc/git-credential-manager

因此,您也可以重新配置git以使用内置的GIT凭据管理器...

git config --global credential.helper manager

答案 20 :(得分:1)

对于 Windows 用户来说,这种方式是可行的

注意:如果您为 GitHub 启用双因素身份验证,请暂时禁用它

  • 步骤 01

Goto Control Panel -> User Accounts -> Credential Manager -> Windows Credentials

  • 步骤 02

Goto Generic Credentials section -> Add a generic credential

enter image description here

  • 步骤 03 - 填写字段

Internet or network address : git.https://github.com
User name : your github username
Password : your github username

enter image description here

现在点击确定。这会将您的 GitHub 帐户的密码和用户名保存到您的本地计算机

答案 21 :(得分:0)

浏览了数十篇SO帖子,博客等之后,我尝试了每种方法,这就是我想出的方法。它涵盖了一切。

The Vanilla DevOps Git Credentials & Private Packages Cheatsheet

所有这些方法和工具都可以用来安全地验证git以克隆存储库,而没有交互式密码提示

  • SSH公钥
    • SSH_ASKPASS
  • API访问令牌
    • GIT_ASKPASS
    • .gitconfig代替
    • .gitconfig [凭据]
    • .git-credentials
    • .netrc
  • 私人套餐(免费)
    • node / npm package.json
    • python / pip / eggs.txt
    • 红宝石宝石Gemfile
    • golang go.mod

银子弹

是否想要使用Just™?这是神奇的银弹。

获取您的访问令牌(如果您需要Github或Gitea指令,请参阅备忘单中的部分),并将其设置在环境变量中(用于本地开发和部署):

MY_GIT_TOKEN=xxxxxxxxxxxxxxxx

对于Github,复制并运行以下行 verbatim

git config --global url."https://api:$MY_GIT_TOKEN@github.com/".insteadOf "https://github.com/"
git config --global url."https://ssh:$MY_GIT_TOKEN@github.com/".insteadOf "ssh://git@github.com/"
git config --global url."https://git:$MY_GIT_TOKEN@github.com/".insteadOf "git@github.com:"

恭喜,现在无论使用https还是ssh url样式,任何自动克隆git存储库的工具都不会受到密码提示的阻碍。

不使用Github吗?

对于其他平台(Gitea,Github,Bitbucket),只需更改URL。请勿更改用户名(尽管任意,但对于不同的配置条目来说是必需的)。

兼容性

这可以在MacOS,Linux,Windows(在Bash中),Docker,CircleCI,Heroku,Akkeris等本地运行。

更多信息

请参阅备忘单的“ .gitconfig代替Of”部分。

安全性

请参阅速查表的“安全性”部分。

答案 22 :(得分:0)

根据rifrol的评论,在Linux Ubuntu上,摘自以下answer

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

其他发行版提供了二进制文件,因此您无需构建它。

在OS X中,它通常是使用默认模块“ osxkeychain”“内置”的,因此您可以免费获得它。

答案 23 :(得分:0)

git config --global user.name "你的用户名"

git config --global user.password "你的密码"

检查

git 配置 --list