赞
踩
那么有没有办法可以在一台电脑上配置多个Git用户,不同的Push地址呢?经过查询和实验,发现是可以实现的。我就以Github来举例说明(服务器的地址都是github.com,也可以是不同的地址),如何配置多用户,多地址提交项目。首先假设有两个账号:一个Github的账号是A,另一个Github的账号是B
1. 配置多个Git用户
首先呢,我们要为不同的Github账号配置不同的Git账号
为A用户生成:
- $ git config user.name "A"
- $ git config user.email "A@hotmail.com"
注意:这里git config命令没有带—global,表示这是一个局部的设置,也就是这个用户是当前项目的,而不是全局的。
为B用户配置:
- $ git config user.name "B"
- $ git config user.email "B@gmail.com"
2. 为不同的用户生成SSH密钥
一般的Git服务器为了安全,都会需要我们提供一个安全的SSH密钥,默认情况下,生成密钥的文件名都是一样的,但是不同的用户,必须设置不同文件名的密钥文件,否则会发生覆盖。密钥生成后,添加到服务端(如Github)
为A用户生成SSH:
$ ssh-keygen -t rsa -C “A@hotmail.com”
- Enter passphrase (empty for no passphrase):
- Enter same passphrase again:
- Your identification has been saved in /c/Users/lange/.ssh/id_rsa.
- Your public key has been saved in /c/Users/lange/.ssh/github_id_rsa.pub.
- The key fingerprint is:
- SHA256:mRAluu98izlMRIQhaezphUvRHnkEH5HFm+aAX6wtXBU zlzsam@hotmail.com
- The key's randomart image is:
- +---[RSA 2048]----+
- | ..ooBB*o E. |
- | =.=o++. . |
- | o =.=o. + |
- | = +.o.Bo |
- | o o.+ OS |
- | o .* o |
- | o.. |
- | ooo. |
- | =o.. |
- +----[SHA256]-----+
为B用户生成SSH(同样的按A的步骤,唯一不同的是密钥文件名和账户密码的不同):
ssh-keygen -t rsa -C “B@gmail.com”
最后会生成四个文件,在我的电脑如下:
- -rw------- 1 lange staff 1679 12 18 21:13 id_rsa
- -rw-r--r-- 1 lange staff 407 12 18 21:13 id_rsa.pub
- -rw------- 1 lange staff 1766 1 4 21:55 lapisy_id_rsa
- -rw-r--r-- 1 lange staff 404 1 4 21:55 lapisy_id_rsa.pub
注意:这里使用邮箱地址来生成的,跟用户生成Git账号的邮箱保持一致
3. SSH多账户配置
在生成密钥的.ssh目录下,新建一个config文件,配置多账户规范,举个样例:
- #github ontheroadtomine@gmail.com
- host github.com #别名,随便定 后面配置地址有用
- Hostname github.com #要连接的服务器
- User ontheroadtomine #用户名
- IdentityFile ~/.ssh/id_rsa #密钥文件的地址,注意是私钥
-
- #github softgeek@163.com
- host lapisy #别名,随便定
- Hostname github.com
- User lapisy
- IdentityFile ~/.ssh/lapisy_id_rsa
4. 增加新的私钥
使用ssh的ssh-add命令将密钥添加到 ssh-agent 的高速缓存中,这样在当前会话中就不需要再次输入密码了 。
- $ ssh-agent bash
- //A账户的私钥
- $ ssh-add ~/.ssh/id_rsa
-
- //B账户的私钥
- $ ssh-add ~/.ssh/lapisy_id_rsa
添加完后,可以使用ssh-add来查看密钥列表
5. 修改push的地址
默认情况下,我们项目下的.git目录下,config文件的内容:
- [core]
- repositoryformatversion = 0
- filemode = true
- bare = false
- logallrefupdates = true
- ignorecase = true
- precomposeunicode = true
- [user]
- email = softgeek@163.com
- name = lapisy
- [remote "origin"]
- url = git@githu.com:Lapisy/RecyclerViewSample.git
- fetch = +refs/heads/*:refs/remotes/origin/*
- [branch "master"]
- remote = origin
- merge = refs/heads/master
其中的remore地址是url = git@githu.com:Lapisy/RecyclerViewSample.git,这时候,我们需要修改跟密钥对应的地址,上面在配置ssh时,为每个Hostname配置了一个host的别名,这时候,我们就不能使用原来的Hostname来提交了,要用别名来代替Hostname。如上面de
url = git@githu.com:Lapisy/RecyclerViewSample.git
需要修改成对应的
url = git@lapisy:Lapisy/RecyclerViewSample.git
然后就可以正常push了。
注意:在向Github push 工程时,可能会碰到一个Bug,提示:
- remote: error: GH007: Your push would publish a private email address.
- remote: You can make your email public or disable this protection by visiting:
- remote: http://github.com/settings/emails
- To lapisy:Lapisy/RecyclerViewSample.git
- ! [remote rejected] master -> master (push declined due to email privacy restrictions)
- error: failed to push some refs to 'git@lapisy:Lapisy/RecyclerViewSample.git'
这里需要到Github中去把邮箱设置成public,或者不让他阻止我们push,如下图:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。