Git多用户,不同项目配置不同Git账号

最近碰到一个比较麻烦的Git的应用场景:就是一台电脑上,可能有个git工程,每个工程的地址和账号密码又是不一样的,刚开始的就是要用那个工程了,就修改下全局的user.name,user.email,但是每次都是很麻烦,甚至会push错地方。

那么有没有办法可以在一台电脑上配置多个Git用户,不同的Push地址呢?经过查询和实验,发现是可以实现的。我就以Github来举例说明(服务器的地址都是github.com,也可以是不同的地址),如何配置多用户,多地址提交项目。首先假设有两个账号:一个Github的账号是A,另一个Github的账号是B

1. 配置多个Git用户

首先呢,我们要为不同的Github账号配置不同的Git账号

为A用户生成:

$ git config user.name "A"
$ git config user.email "[email protected]"

注意:这里git config命令没有带—global,表示这是一个局部的设置,也就是这个用户是当前项目的,而不是全局的。

为B用户配置:

$ git config user.name "B"
$ git config user.email "[email protected]"

2. 为不同的用户生成SSH密钥

一般的Git服务器为了安全,都会需要我们提供一个安全的SSH密钥,默认情况下,生成密钥的文件名都是一样的,但是不同的用户,必须设置不同文件名的密钥文件,否则会发生覆盖。密钥生成后,添加到服务端(如Github)

为A用户生成SSH:

$ ssh-keygen -t rsa -C “[email protected]

运行后,会然你输入存储密钥文件的地址和密码,自己决定就行,最好是用默认的路径,然后修改下密钥文件名,类似下面的:

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 [email protected]
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 “[email protected]

最后会生成四个文件,在我的电脑如下:

-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 [email protected]
host github.com  #别名,随便定 后面配置地址有用
    Hostname github.com #要连接的服务器
    User ontheroadtomine #用户名
    IdentityFile ~/.ssh/id_rsa  #密钥文件的地址,注意是私钥

#github [email protected]
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 = [email protected]
    name = lapisy
[remote "origin"]
    url = [email protected]:Lapisy/RecyclerViewSample.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master

其中的remore地址是url = [email protected]:Lapisy/RecyclerViewSample.git,这时候,我们需要修改跟密钥对应的地址,上面在配置ssh时,为每个Hostname配置了一个host的别名,这时候,我们就不能使用原来的Hostname来提交了,要用别名来代替Hostname。如上面de

url = [email protected]: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,如下图:
Git多用户,不同项目配置不同Git账号_第1张图片

欢迎进入到 http://blog.lapisy.com 查看更多文章

你可能感兴趣的:(Android基础,Java基础)