一个repo关联多个git
其实挺简单的,网上说的改什么.git/config文件并不准确,还挺有误导性的。过程简单如下。怎么装git就不说了。
使用多个git账号的关键是需要让git的ssh认证能同时支持多个git。我们知道git认证是通过.ssh/id_rsa密钥来进行的。而如果同时用多个git,那么必然需要生成多个密钥对。所以生成密钥的时候,不能都用默认的密钥对的名字id_rsa,需要加以区分,比如加后缀名:
# ssh-keygen -t rsa -C "your_email@youremail.com"
我们一般是一路回车按到底,但对于多个git,在屏幕回显生成密钥对文件名时,需要自定义一下,否则都用默认的id_rsa,那么后面的就会覆盖掉前面的
>Generating public/private rsa key pair. Enter file in which to save the key
(/Users/your_user_directory/.ssh/id_rsa):<press enter>
这里不要用默认的文件名,自定义一个新的文件名,比如输入
/Users/your_user_directory/.ssh/id_rsa_github
后面的可以一路回车按到底
同理,下一个git需要生成密钥对的时候,也在这里改一下默认文件名,比如
/Users/your_user_directory/.ssh/id_rsa_company
但是这样有个问题,回头做push/pull的时候,因为git默认是去找.ssh/id_rsa,所以找不到id_rsa会报认证失败。所以还必须让git知道哪个git应该用哪个密钥。还是在.ssh目录下,有个config文件,编辑此文件,有几个git就加几个section。注意是改./ssh下的config,不是像很多网上文章说的那样改.git下的config。config的例子:
Host company
HostName git.company.com
User git
IdentityFile ~/.ssh/id_rsa_company
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github
# mkdir folder
# git init
然后先加一个github上的repo:
# git remote add github git@github.com:username/temp.git
平常我们一般加的时候,命令格式是:
# git remote add origin git@github.com:username/temp.git
本来这里origin指的就是远端,对应回头我们push时候的git push origin master里的origin。但因为要关联多个git,用origin不好区分,所以add git repo的时候,还是直接用能区分git的名字。对应上面我们配密钥对的时候用的名字:比如github就用github,coding就用coding,company就用company。
然后再加另一个git,比如公司的git:
# git remote add company git@git.company.com:product/project.git
这样就行了。回头想对github的时候就用git push/pull github master/branch,相对公司的时候就用git push/pull company master/branch
使用多个git账号的关键是需要让git的ssh认证能同时支持多个git。我们知道git认证是通过.ssh/id_rsa密钥来进行的。而如果同时用多个git,那么必然需要生成多个密钥对。所以生成密钥的时候,不能都用默认的密钥对的名字id_rsa,需要加以区分,比如加后缀名:
# ssh-keygen -t rsa -C "your_email@youremail.com"
我们一般是一路回车按到底,但对于多个git,在屏幕回显生成密钥对文件名时,需要自定义一下,否则都用默认的id_rsa,那么后面的就会覆盖掉前面的
>Generating public/private rsa key pair. Enter file in which to save the key
(/Users/your_user_directory/.ssh/id_rsa):<press enter>
这里不要用默认的文件名,自定义一个新的文件名,比如输入
/Users/your_user_directory/.ssh/id_rsa_github
后面的可以一路回车按到底
同理,下一个git需要生成密钥对的时候,也在这里改一下默认文件名,比如
/Users/your_user_directory/.ssh/id_rsa_company
但是这样有个问题,回头做push/pull的时候,因为git默认是去找.ssh/id_rsa,所以找不到id_rsa会报认证失败。所以还必须让git知道哪个git应该用哪个密钥。还是在.ssh目录下,有个config文件,编辑此文件,有几个git就加几个section。注意是改./ssh下的config,不是像很多网上文章说的那样改.git下的config。config的例子:
Host company
HostName git.company.com
User git
IdentityFile ~/.ssh/id_rsa_company
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_github
这里有个前提,那就是在不用git用的账户e-mail是不同的,所以用ssh-keygen的时候会需要执行两次,所以才会有覆盖的问题。一般而言,如果我们一个用github,一个用公司的git,那么因为公司的e-mail和github账号的e-mail往往不一致,所以有这个问题。但如果不同git用的都是同一个e-mail,那么就不存在这个问题了,上述这些也都不用做了。直接生成一个默认的id_rsa密钥对,哪个git需要就把公钥贴到哪里去就行了。
怎么把公钥贴到git上去就不说了哈。至此生成配置密钥对的工作就完成了。
然后就可以去配置git目录了,一个目录对应一个git的repo。首先创建一个目录并到目录下去初始化:# mkdir folder
# git init
然后先加一个github上的repo:
# git remote add github git@github.com:username/temp.git
平常我们一般加的时候,命令格式是:
# git remote add origin git@github.com:username/temp.git
本来这里origin指的就是远端,对应回头我们push时候的git push origin master里的origin。但因为要关联多个git,用origin不好区分,所以add git repo的时候,还是直接用能区分git的名字。对应上面我们配密钥对的时候用的名字:比如github就用github,coding就用coding,company就用company。
然后再加另一个git,比如公司的git:
# git remote add company git@git.company.com:product/project.git
这样就行了。回头想对github的时候就用git push/pull github master/branch,相对公司的时候就用git push/pull company master/branch
评论
发表评论