Git的使用(3) —— 远程版本库的操作(GitHub)
1. 配置SSH
- GitHub
登陆GitHub后,点击右上角头像,选择 Setting 。
在左面栏目中选择"SSH and GPG keys"。
打开生成的SSH公钥文件 id_rsa.pub ,不知道怎么配的看:Git的安装与配置在最下面有讲。
点击右上角绿色按钮"New SSH key",在Title中给key起名,在Key中填写从公钥中复制的所有字符,然后点击"Add SSH key",就成功添加了一个key。
- 码云Gitee
码云的操作跟GitHub操作一样,只不过全是中文操作,更加简单。
2. 将本地版本库推送到远程版本库
还是最推荐使用TortoiseGit工具+SSH方式推送,毕竟简单许多。其实推送的原理就是将本地版本库中有的文件去替换掉远程版本库中没有的文件。这么说不是很准确,但也差不多。
- 使用SSH方式
使用SSH方式,需要预先配置SSH,如何配置在上面说明。- TortoiseGit推送
前提是本地版本库中已经有文件。并且配置好TortoiseGit中的远端。
如何配置TortoiseGit中的远端,见:《TortoiseGit的安装与配置》
右键工作区空白位置,选择 Git 同步。
选择本地分支、远端分支、配置好的远端URL,点击推送即可把本地版本库推送到远端版本库。
推送成功后,消息框会提示成功推送。因为演示推送的是GitHub,所以可以上GitHub上看一看。
- 命令行推送
右键工作区空白处,选择"Git Bash Here"。git remote add origin(远程版本库别名,任意命名即可) SSH连接 git push -u origin(远程版本库别名) master(远程版本库分支)
- TortoiseGit推送
- 使用HTTP方式
使用HTTP因为没有加密通信连接,在本地版本库和远程版本库操作时都需要输入用户名和密码。但是可以在Windows的凭证管理器中设置Windows凭证,以后Git就可以自动调用凭证管理器中的凭证来自动登录。- TortoiseGit推送
右键工作区空白位置,选择 Git 同步。选择本地分支、远端分支、配置好的远端URL,点击推送。
此时弹出GitHub的登陆窗口,输入用户名和密码。
然后就成功推送到了远程版本库。 - 命令行推送
跟使用SSH推送一样的语句,只是也会弹出GitHub的登陆请求,输入用户名和密码后就可以推送到远程版本库了。
- TortoiseGit推送
3. 将远程版本库克隆到本地版本库
因为GitHub上的开源项目都是开源的,可以随意下载,所以HTTP方式无需输入口令就可以将项目克隆到本地,SSH不管是推送还是克隆都需要配置公钥和私钥。但如果是私有项目或者私人搭建的Git远程版本库,则可能根据安全等级要求输入口令。
- 使用SSH
- TortoiseGit方式
在空白文件夹内右击,选择"Git 克隆"。
填写URL,选择目录,点击确定。在消息栏中提示成功即可。 - 命令行方式
在空白文件夹内右击,选择"Git Bash Here"。
BASH git clone 远程版本库URL
克隆完成。
- TortoiseGit方式
- 使用HTTP
操作和使用SSH一样,只是URL是非加密的HTTP形式。
4. 从远程版本库拉取更新到本地版本库
- 因为一个远程版本库就是为了给多个人使用的。为了得到别人写的代码,总不能删除整个本地版本库重新克隆一个,因为里面可能有自己还未推送的添加/修改操作,所以这里就用到了拉取(pull)操作。
- 拉取(pull)是获取(fetch)+合并(merge)的结合。获取操作就是从远程版本库中得到远程版本库指定分支最新的文件/操作,合并操作就是将获得的新一个节点中的文件/操作和本地版本库的文件进行合并更新,然后在当前分支产生新的节点。拉取命令就是一下执行这两个操作。
- 这里的操作统统是基于SSH方式的,如果用HTTP方式,则中间只多出了输入口令的操作。
- 右击工作区空白处,在TortoiseGit中选择"拉取"。选择远程版本库和远程版本库的分支后,点击确定,就可以将指定分支的最新文件更新到本地版本库。
5. 从远程版本库拉取产生的冲突
- Git有一套精确的判断方法,将远程版本库中的文件和本地版本库中的文件进行对比后更新。但是如果两个人同时修改一个文件,一个人将文件推送到了远程版本库,另一个将自己修改后的同一个文件提交到本地版本库再拉取更新后,可能就会产生冲突。因为两个人同时对一个文件做出了修改,Git无法判断到底应该保留哪些代码,就会报错提示当前拉取方。拉取方解决冲突后才能将本地版本库推送到远程版本库。
- 目前有两种冲突:
- 推送冲突:本地的文件版本比远程版本库中的要早,不是在最新的文件上所做的修改,无法推送成功。
- 拉取冲突:本地的文件的内容修改后和远程版本库中的文件内容不一致,拉取时无法自动判断合并。
- 第一种只会提示冲突,并不会产生冲突文件,也不会将本地版本库中的文件推送到远程版本库;但是第二种冲突会在冲突文件上产生冲突代码,需要手动解决。
- 产生冲突的文件图标左下角出现黄色警示标志,意为产生冲突。Git会将两个版本的差异写明,然后需要手动排除冲突。右键冲突文件,在TortoiseGit中选择"编辑冲突",在文本编辑器中手动解决冲突。
- 解决冲突后,右击冲突文件,在TortoiseGit中选择"解决冲突",将文件标记为已解决冲突。文件图标左下角变成红色叹号,等待提交文件到本地版本库中。在提交到本地版本库的过程里,会首先提醒文件里面有一个冲突文件,需要确认是否将这个文件提交到本地版本库。
而且会自动在日志里填写出现冲突的文件,需要手动将这些警示信息替换成别的提示信息。
提交后,就算完成解决冲突。