如何在同一台电脑使用不同的账号提交到同一个github仓库

    最近这段时间使用github,有时在公司办公,想要用git提交代码到自己的github仓库,提交是显示的作者是自己在公司的账户,而不是自己的github账户,这就相当于提交到github的代码不是自己本人提交的,是其他人提交的。

    现在的情况是这样的:在公司我们也是使用git来管理代码,我们公司内部有自己的git仓库(B),提交代码时用的账户就是公司的oa账号(A)。而我自己有时候在家里做开发的时候,就是用自己注册github账户(C)提交代码到自己账户下的github仓库(D)。现在有时候在公司办公的时候,写一些demo或者好的代码时,想提交到自己的github账户(D),由于用的是公司的电脑,提交到D时显示的用户名是A。

    总结一下就是,如何在同一台电脑使用不同的账号提交到同一个github仓库,这里我希望是用C账户提交到D仓库。而不是A账户提交到D仓库。

我查了两个链接资料:
1.如何在同一台电脑上使用两个github账户:http://www.tuicool.com/articles/zqa6Rz
2.解决cygwin下的“Could not open a connection to your authentication agent.”:http://www.cnblogs.com/cheche/archive/2011/01/07/1918825.html


根据上面所说的我给自己的github账户配置了另外一个sshkey,用的是自己的私人邮箱生成的(之前已经在github上配置过了一个sshkey,用的是公司的邮箱)。

1:为工作账号生成SSH Key

$ ssh-keygen -t rsa -C "your-email-address"

#存储key的时候,不要覆盖现有的id_rsa,使用一个新的名字,比如id_rsa_work

2:把id_rsa_work.pub加到你的work账号上

3:把该key加到ssh agent上。由于不是使用默认的.ssh/id_rsa,所以你需要显示告诉ssh agent你的新key的位置

$ ssh-add ~/.ssh/id_rsa_work

# 可以通过ssh-add -l来确认结果

4:配置.ssh/config

$ vi .ssh/config

# 加上以下内容
#default github
Host github.com
  HostName github.com
  IdentityFile ~/.ssh/id_rsa

Host github_work
  HostName github.com
  IdentityFile ~/.ssh/id_rsa_work

5:这样的话,你就可以通过使用github.com别名github_work来明确说你要是使用id_rsa_work的SSH key来连接github,即使用工作账号进行操作。

#本地建库
$ git init
$ git commit -am "first commit'
 
#push到github上去
$ git remote add origin git@github_work:xxxx/test.git
$ git push origin master
如果出现问题“Could not open a connection to your authentication agent”,需要需要ssh-agent启动bash,或者说把bash挂到ssh-agent下面,即执行以下两个命令:

 $ ssh-agent bash --login -i
 $ ssh-add

【ssh-agent介绍】

ssh-agent就是一个管理私钥的代理,受管理的私钥通过ssh-add来添加,所以ssh-agent的客户端都可以共享使用这些私钥。

好处1:不用重复输入密码。

用 ssh-add 添加私钥时,如果私钥有密码的话,照例会被要求输入一次密码,在这之后ssh-agent可直接使用该私钥,无需再次密码认证。

好处2:不用到处部署私钥

假设私钥分别可以登录同一内网的主机 A 和主机 B,出于一些原因,不能直接登录 B。可以通过在 A 上部署私钥或者设置 PortForwarding 登录 B,也可以转发认证代理连接在 A 上面使用ssh-agent私钥登录 B。

islue@localhost $ ssh -A HOST_A
islue@HOST_A $ ssh HOST_B
islue@HOST_B $
我的执行情况是这样的:


执行完红色的三步之后,.ssh文件夹目录下的情况:


把id_rsa_king4github.pub的sshkey添加到自己的github账户中:



这里有两个ssh,一个在公司电脑用公司邮箱生成的,一个是在公司电脑用私人邮箱生成的。

接着继续操作:




vi /c/Users/kxw/.ssh/config

Host github.com
HostName github.com
IdentityFile ~/.ssh/id_rsa

Host gitlab.tools.XXX.com
HostName gitlab.tools.XXX.com
IdentityFile ~/.ssh/id_rsa_XXX



这样如果我访问时使用的是github.com,就是使用公司邮箱生成的ssh(E)访问github,如果我使用github_king,即使用的是私人邮箱生成的ssh(F),也就是我github账户注册的邮箱。

情况也确实如此这样,这样去访问我的github仓库使用的是不同的ssh。这样你或许会觉得,如果使用ssh(F)访问gitghub,那么提交代码时就是我的私人账户提交的。可是事实并不是这样的,提交之后显示的作者还是公司的账号,名称是kingson.wu(G),而不是我的私人账户名称kingson4wu(H)。

原因就是因为我设置的全局用户和邮箱都是公司的,这个配置在文件.gitconfig中:

打开之后:



    平时在公司工作时都是用公司的账号提交,不太有必要改这里的配置。
所以如果要使用自己的私人账号提交代码的话,要重新配置user和email(不要设置全局),进入本地的某个git repository中,执行以下命令:
git config user.name "kingson4wu"
git config user.email "Kingson_Wu@163.com"

这样提交代码到自己的github仓库之后,显示的提交作者就是kingson4wu,即自己提交的。

现在有几个问题:
(1)如果使用私人邮箱生成的ssh(F)来访问github,是不是可以不用执行命令git config user.email "Kingson_Wu@163.com"?
(2)如果使用公司邮箱生成的ssh(E)来访问github,是不是如果执行
git config user.name "kingson4wu"
git config user.email "Kingson_Wu@163.com"
这两条命令,则提交代码时显示的名称是kingson4wu,而且是自己提交的?

    带着这几个问题我做了几个试验(各种情形),结论如下:
问题(1),提交代码之后显示的名称确实是kingson4wu,但是遗憾的是,名称虽然是kingson4wu,但是却显示是别人提交的。原因还是因为全局的邮箱是公司的邮箱,我github账户注册的是我的私人邮箱。所以(1)是不行的。
问题(2),提交代码之后显示的名称确实是kingson4wu,显示的竟然是自己提交的,不是别人提交的。


    或许这时你会想到其他几种情况结果会是怎样的,好吧,我都做了实验。最终的结论如下:
无论你是使用ssh(E),还是ssh(F),其实如果想要是自己私人的账户提交,都要重新设置name和email,不同的只是使用不同的ssh访问github而已。
如果只设置了name还是不行,提交之后名称虽然是对的,但是仍然显示是别人提交的。
想要看看是不是自己提交的,看看提交者是不是自己github的头像,或者是自己的今天的commit数有没有增加即可。


最终的总结就是:
不用设置多个私人的ssh(F),只需要从github拉代码下来,进入git仓库,执行
git config user.name "kingson4wu"
git config user.email "Kingson_Wu@163.com"
这两条命令即可。


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值