简单学习了下怎样利用git bash上传文件到指定的github项目中,我们来回顾下。首先在本地安装好git,设置好用户名和邮箱(提交时的显示),接着我们生成SSH key把它添加到该项目owner账户的key setting中,表示本地可以读写该项目了,接着我们就可以愉快地clone和push了。当你修改了项目后,会显示你的信息,比如:
github根据配置文件的user.email来获取github帐号显示author信息,so这里的信息正是在global config设置时的user.email
对应的github账户名,如果你设置的email没有注册过github,那么会显示global config设置时的user.name
,如果没有global设置,可以在进入每个项目后单独设置name和email信息,设置方式如下:
$ git config user.name "hanzichi" //给自己起个用户名$ git config user.email "abc@gmail.com" //填写自己的邮箱
设置完可以在该项目的.git
文件夹的config
文件中看到相应设置信息,这样就可以为每个项目设置不同的提交用户名了。需要注意的是,如果设置了global则以global优先,如果没有设置global则查看每个项目的设置(在.git的config文件中),如果还没有,则用unknown提交。(2017.5.14 勘误,如果设置了 local config,则以 local 为先,如果没有,则取 global 配置)
言归正传,本文主要要讲的是如何设置多个SSH key。为什么要设置多个SSH key?一个github账户的后台可以添加多个ssh key(可以多人修改该项目),但是同一个ssh key只能添加到一个github后台上(同一个ssh key可以添加到不同的服务器上)。这也可以理解,毕竟ssh key相当于密码,同一个密码当然只能对应一个账户了。那如果本地要修改多个github账户下的项目呢?只能添加多个git用户了。举个栗子,这里有个,我要在本地对它作修改。首先,上文中获得的ssh key已经不能使用了,怎么办呢?
1、生成新的ssh key:
#新建SSH key:$ cd ~/.ssh # 切换到C:\Users\Administrator\.sshssh-keygen -t rsa -C "mywork@email.com" # 新建工作的SSH key# 设置名称为id_rsa_workEnter file in which to save the key (/c/Users/Administrator/.ssh/id_rsa): id_rsa_work
我们打开.ssh
文件夹可以发现生成了两个新的东西,id_rsa_work
和id_rsa_work.pub
,把公钥添加到对应github账户的后台key setting中,然后我们试着执行clone和push的命令,出错了:
2、新建config文件
这时我们需要在.ssh
文件夹下新建个config
文件(相当于一个映射文件),文件内容比如这样:
# 该文件用于配置私钥对应的服务器# Default github user(first@mail.com) Host github.com HostName github.com User git IdentityFile C:/Users/xlianyu/.ssh/id_rsa# second user(second@mail.com)# 建一个github别名,新建的帐号使用这个别名做克隆和更新 Host github2 HostName github.com User git IdentityFile C:/Users/xlianyu/.ssh/id_rsa_work
在每次push的时候,本地的私钥都会和服务端(github)的公钥去匹配,如果一致就可以push了;而没设置config文件之前,本地的私钥都会读取id_rsa
文件,很显然这是第一次设置时产生的私钥。我们可以测试一把,看看本地能不能通过SSH跟github2服务器通信了:
$ ssh -T github2Hi FishLeong! You've successfully authenticated, but GitHub does not provide shell access.
3、修改具体项目的config
文件
设置完了config
文件,我们试着重新clone文件:
git clone git@github.com:FishLeong/test.git
在push前,我们还需要修改下该项目.git
文件夹下的配置文件config
:
url = git@github.com:FishLeong/test.git #修改前url = github2:FishLeong/test.git #修改后
github2字样和上面的设置是对应的。很显然,我们需要引导它去读取正确的私钥去和服务端保存的公钥匹配。因为示例是的两个服务端都是github,如果是别的服务器的话,则保存服务器的域名就可以了,比如一个是 GitHub,一个是 GitLab,那么就不用再设置这一步了,会去自动匹配服务器,关联私钥。
参考
2016-02-25:
关于提交信息,如果用了 global 命令,则用 global 的 user.email 提交,其次是 user.name。
$ git config --global user.name "hanzichi" //给自己起个用户名$ git config --global user.email "abc@gmail.com" //填写自己的邮箱
如果希望每个项目用单独的 user,可以先删除 global config(2017.5.14 勘误,其实不需要删除,会先取 local 配置):
$ git config --global --unset user.name $ git config --global --unset user.email
然后在项目中配置仅限于该项目的 user 信息:
$ git config user.name "hanzichi" //给自己起个用户名$ git config user.email "abc@gmail.com" //填写自己的邮箱
可以用 git config -l
命令查看当前项目下的信息。
2017.5.14 勘误:如果设置了 local config,则以 local 为先,如果没有,则取 global 配置
常用命令:
- git status
- git add .
- git commit -m 'add files'
- git push origin master