首页 > 代码库 > Git 简洁教程之 中级操作

Git 简洁教程之 中级操作

远程仓库的SSH

本地Git仓库和GitHub仓库之间的传输是通过SSH加密,为了使用SSH加密,需要在本地生成Private Key 以及Public key,其中public key要保存到GitHub的网站上,这样GitHub就可以知道提交代码的是你,而不是别人。下面为具体的步骤

第1步:创建SSH Key。在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsaid_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:

$ ssh-keygen -t rsa -C "youremail@example.com"
你需要把邮件地址换成你自己的邮件地址,然后一路回车,使用默认值即可,由于是用于实验,无需设置密码。

第2步:登陆GitHub,打开“Account settings”,“SSH Keys”页面:

然后,点“Add SSH Key”,填上任意Title,在Key文本框里粘贴id_rsa.pub文件的内容


GitHub允许你添加多个Key。假定你有若干电脑,你一会儿在公司提交,一会儿在家里提交,只要把每台电脑的Key都添加到GitHub,就可以在每台电脑上往GitHub推送了。

添加/关联远程库

当你已经在本地创建了一个Git仓库后,如果想在GitHub创建一个Git仓库,并且让这两个仓库进行远程同步,且GitHub上的仓库既可以作为备份,则可以按照下面的步骤来执行
  • 登陆GitHub,在右上角找到“Create a new repo”按钮,创建一个新的仓库
  • 在Repository name填入learngit,其他保持默认设置,点击“Create repository”按钮
  • 创建成功后在GitHub上的这个learngit仓库还是空的,此时你可以把GitHUB上的learngit克隆到本地,也可以把它与一个本地的仓库进行关联,由于前面的例子中已经创建了一个本地的仓库,所以这里选择关联的方式
  • 执行关联命令git remote add learngit git@github.com:Eric-aihua/learngit.git
    技术分享技术分享技术分享
  • 把本地的内容推送到GitHub的技术分享仓库上:git push -u learngit master
    由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的
    learngit分支内容推送的远程新的master分支,还会把本地的learngit分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。
    技术分享技术分享
  • 推送成功后,可以立刻在GitHub页面中看到远程库的内容已经和本地一模一样

从现在起,只要本地作了提交,就可以通过命令:git push learngit master 把本地learngit分支的最新修改推送至GitHub


克隆远程仓库

上面的例子讲的是如何把本地已经创建好的工程和推送到远程仓库中,本小节主要说明如何把远程仓库的内容克隆到本地,适用于一个在GitHub上已经存在的一个项目,以上节的learngit为例,将它克隆到learngit2目录
  • 创建并进入learngit2目录
  • 执行git clone git@github.com:Eric-aihua/learngit.git
技术分享技术分享

GitHub给出的地址不止一个,还可以用https://github.com/michaelliao/gitskills.git这样的地址。实际上,Git支持多种协议,默认的git://使用ssh,但也可以使用https等其他协议。

使用https除了速度慢以外,还有个最大的麻烦是每次推送都必须输入口令,但是在某些只开放http端口的公司内部就无法使用ssh协议而只能用https

分支的概念

分支在实际中有什么用呢?假设你准备开发一个新功能,但是需要两周才能完成,第一周你写了50%的代码,如果立刻提交,由于代码还没写完,不完整的代码库会导致别人不能干活了。如果等代码全部写完再一次提交,又存在丢失每天进度的巨大风险。

现在有了分支,就不用怕了。你创建了一个属于你自己的分支,别人看不到,还继续在原来的分支上正常工作,而你在自己的分支上干活,想提交就提交,直到开发完毕后,再一次性合并到原来的分支上,这样,既安全,又不影响别人工作。


分支的创建与合并

  • 创建并切换到dev分支 git checkout -b dev
    技术分享技术分享
  • 用git branch 查看分支情况
    技术分享技术分享
  • 在dev分支上对readme.txt文件做修改并提交
    技术分享技术分享
  • 可以使用git push origin dev 命令将dev分支推送到GihHub上
    技术分享技术分享
  • 使用git checkout master 切换回master分支,发现dev分支上的内容在master上没有更新
    技术分享技术分享
  • 使用git merge dev 将dev分支的内容合并到master
    技术分享技术分享

    git merge命令用于合并指定分支到当前分支。合并后,再查看readme.txt的内容,就可以看到,和dev分支的最新提交是完全一样的。注意到上面的Fast-forward信息,Git告诉我们,这次合并是“快进模式”,也就是直接把master指向dev的当前提交,所以合并速度非常快。当然,也不是每次合并都能Fast-forward,我们后面会将其他方式的合并

    确认master的内容没有问题后,就可以将master的内容push到github上以及可以使用git branch -d dev将dev 分支删除

    因为创建、合并和删除分支非常快,所以Git鼓励你使用分支完成某个任务,合并后再删掉分支,这和直接在master分支上工作效果是一样的,但过程更安全。













Git 简洁教程之 中级操作