上一遍介绍了单机状态下Git的一些基本操作命令,在个人使用的情况下,已满足日常个人使用所需(比如自己记录个文件,工作日志之类的);但在实际工作中,更多的是团队之间协同工作。此时上一篇的命令,明显已无法完全满足需求,故本篇将会介绍远程仓库的使用。
注意:本篇会涉及到分支概念,可以先看 Git学习笔记(6)----分支 初步了解一下分支。
前面Git学习笔记(2)已经介绍了分布式的概念,相信大家看完后对远程仓库有了一定的概念,这里再贴一下官方的介绍吧:远程仓库是指托管在网络上的项目仓库,可能会有好多个,其中有些你只能读,另外有些可以写。同他人协作开发某个项目时,需要管理这些远程仓库,以便推送或拉取数据,分享各自的工作进展。 管理远程仓库的工作,包括添加远程库,移除废弃的远程库,管理各式远程库分支,定义是否跟踪这些分支。本篇只介绍远程操库的一些基本操作如:推送、拉取数据、添加远程仓库等,涉及到的命令有“git remote”、“git push”、“git fetch”、“git pull”、“git clone”。
为了方便学习,使用著名网站GitHub来作为远程仓库,一般来说,搭建一个内部的Git服务器,都是专业运维IT的工作,对于目前学习阶段的我们来说,还是以学习使用为主,故本篇不对本地仓库与远程仓库之间的配置进行介绍,只介绍对远程仓库的使用及操作。
使用前准备:
1、GitHub账号与本机关联(通过配置SSH)
2、GitHub上创建新项目“GitTest”
3、创建本地仓库GitTest
添加远程仓库
使用命令 “git remote add origin git@github.com:XXX/GitTest.git” 将刚刚在GitHub上创建的GitTest项目关联到本地仓库,添加后,远程库的名字默认是origin,也可以改成别的(不推荐改,它就像业内通用名称一样,具有代表性),依旧没有提示:
推送远程仓库
现在,我们可以把本地仓库的内容,推送到刚刚添加的远程仓库,使用命令“git push”,如图所示
其中 origin 表示远程仓库 ,master 表示主分支(后面会介绍),此时使用-u 是由于第一次推送,指定一个默认主机,可以不加。此时已经把本地仓库的test.txt文件,推送到GitHub上了,如图所示:
以后再有修改提交到本地仓库后,可通过此命令将修改推送至远程仓库。
tips:第一次连接Github时,会出现以下提示:
出现“Are you sure you want to continue connecting(yes/no)?”时,不要直接回车,要输入yes,图为错误的示范
更新远程仓库
当你和别人共享一个远程仓库时,就不仅仅你一个人会提交内容到远程仓库了,用过SVN的同学都知道,在改动文件之间,首先要update一下,将最新的文件从svn上下载到本地,同理,你也可以从远程仓库中,把最新的版本,下载到本地仓库中。
使用命令“get fetch”和"get pull"命令均可以更新远程仓库到本地,下面分别介绍一下两个命令。
git fetch <远程主机名> <分支名>
git fetch <远程主机名> 命令将某个远程主机的更新,全部取回本地,但是不会对本地已修改的文件或代码产生影响,默认情况下,获取所有分支下的版本,当然后面也可以指定某个分支,目前还没有介绍分支,就暂时不加分支。为方便演示,我直接在GitHub上和本地分别对test.txt文件做修改,然后获取到本地:
通过git fetch命令获取远程仓库内容:
此时已经获取到远程仓库的最新版本,再看本地文件状态,没有受到任何影响(如果是用svn的话,此时已经提示文件内容有冲突需要解决了)。那么更新到的内容,怎么查看呢?取回的更新,在本地主机上要用"远程主机名/分支名"的形式读取。比如我的是“origin/master”,想要查看刚刚取回的最新版本日志的话,就使用命令"git log origin/master",如图所示:
其中Update test.txt 就是刚刚在GitHub上修改的版本记录(注意:没写提交日志,这是很不好的习惯)。
如果你不知道你的远程主机名或者分支名,可以使用命令“git branch” 来查看,默认查看的是本地分支,-r 表示查询远程分支,-a 表示查询所有分支,如图所示:
git pull <远程主机名> <远程分支名>:<本地分支名>
这个命令稍微复杂一点,它的作用是:取回远程主机的指定分支,并将其合并到本地的指定分支,比如,将远程仓库origin的dev分支获取并合并到本地的master分支,那么就是:“git pull origin dev:master”,如果是与本地当前分支合并,则:及后面分支名可以省略。由于我刚fetch过远程仓库,所以再次在GitHub上修改一下内容(图就略了),直接将GitHub上版本pull到本地:"git pull origin master",由于本地已有修改,所以pull的结果是:
提示本地有修改,无法合并,请先提交或隐藏本地修改后再合并,此时一般有两种处理方式:
1、提交本地修改,再次 git pull,结果如图:
提示有合并冲突导致自动合并失败,需要你手动修复后再次提交,出现该提示主要是由于你在本地修改的内容,和在GitHub上修改的内容是同一行,所以在自动合并的时候会出现无法合并的情况(因为不知道怎么取舍),如果修改的不是相同位置的内容,那么就会自动合并成功了,这种情况读者自己尝试、感受一下吧~
tip:当出现合并冲突时,本地文件左下角图标会变成黄色感叹号,此时是不能提交的,需要手动将文件冲突解决掉以后再提交,冲突解决方法在分支篇会有介绍。
2、直接将本地修改的内容还原,再次git pull,这个就比较明显了,相当于本地没有修改了,直接就pull了。
事实上git pull,就是先git fetch,再git merge了,在实际使用中,读者根据自己需求来选择使用git fetch 和 git pull。
克隆远程库
顾名思义,就是将远程库copy一份到本地,上面介绍的git remote,是将本地已有的库与远程仓库关联起来,而克隆,则是从无到有,不需要建立本地仓库,命令是
“git clone <版本库的网址> <本地目录名>”,其中版本库网址为必填(不然从哪里克隆...),支持多种协议如HTTPS、SSH、git、本地协议等(一般运维人员来维护远程仓库);本地目录名为选填,表示将远程仓库克隆到指定目录下,不填表示克隆在当前目录下。比较简单,就不贴演示图了,懒一下...
以上就是本篇介绍的对于远程仓库的一些常用操作,快动手实践一下吧~
到目前为止,git 的整体使用流程已经大概清晰了,是时候贴张图了,相信看完这张图,你对每个命令的作用,会有一个更好的认识:
注:
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库