入门版本库
本地版本库创建
Linux基础操作
在现今的软件开发中,Linux系统及其命令行的使用,已经是一项必不可少的技能。虽然有其他基于Git的图形化软件,但是Git只能通过命令行进行操作。因此,掌握一些基础的Linux操作命令很有必要。
创建某个目录
有时我们需要创建目录,这时就需要使用命令mkdir。通过mkdir,可以在指定的目录下创建文件夹,其用法如下:
-
在当前目录下,创建目录helloGit: mkdir helloGit
-
在/home目录下,创建目录helloGit:mkdir home/helloGit
mkdir的其他高级用法请参考其他Linux资料。
创建文件
创建文件可以使用命令touch,其用法如下:
- 在当前目录下,创建文件helloGit.txt:touch helloGit.txt
- 在/home目录下,创建文件helloGit.txt:touch /home/helloGit.txt
进入目录
进入某个目录,需要用到命令cd,其用法如下:
- 进入helloGit目录:cd helloGit
这样的用法默认了helloGit目录,存在于当前目录下。也可以在cd命令中,直接指定进入当前目录:cd ./helloGit
-
进入/home/helloGit目录:cd /home/helloGit
-
返回到上一级目录:
在Linux系统下,上一级目录可以用‘..’代替,如:
|
|
使用Git前的准备
安装
Git可以使用源码安装,具体的安装过程请参考Git官网教程或者Github上Git仓库的用户指南。
但对于初学用户,还是建议大家直接安装。
- Linux下安装:
|
|
- Mac上安装:
在 Mac 上安装 Git 有两种方式。可以使用图形化的 Git 安装工具,网址为图形化Git工具安装地址;另一种是通过MacPorts 安装。如果已经装好了 MacPorts,请用下面的命令安装 Git:
sudo port install git-core +svn +doc +bash_completion +gitweb
Windows下安装:
在 Windows 上安装 Git,可以到 Git官网 的页面上,下载 exe 安装文件并运行:
完成安装之后,就可以使用命令行的 git 工具了。建议大家最好使用Unix风格的shell来运行Git。另外,Linux也有其他图形化的Git工具,如Tortoisegit。不过,还是建议大家直接使用shell来运行Git。
Git配置
由于Git是一个分布式的版本控制系统,所以当利用它进行分工协作时,必须区分不同的机器。这一点可以通过配置机器的名字和邮箱完成。Git初始使用时,也会提示进行配置。配置命令如下:
|
|
在实际的使用过程中,可以将“Your Name”、“email@example”替换为自己实际的名字和邮箱。
如何创建一个本地版本库
首先,我们需要创建一个目录,做为我们的本地版本库,然后使用git init命令,将其初始化为一个本地版本库,如下:
|
|
通过上述命令,即可在/home目录下,创建repo目录,并将其初始化为一个版本库。
添加修改到暂存区域
如何将修改保存到暂存区
本地版本库就相当于一个存放在本地的仓库,里面记录了我们本地文件的各种版本及不同版本之间的差异。当我们添加、删除或者修改了文件之后,我们必须将修改添加至工作区以暂时保存(Git的工作原理请认真阅读背景知识部分)。
添加修改,并保存至工作区,需要用到git add命令,git add命令的使用方式如下所示:
|
|
如上所示,当需要添加所有文件至工作区时,使用git add .,如果想添加指定文件,只需要像示例中添加hello.txt一样,将文件名做为参数名,传给git add即可。
查看工作区状态
当你创建完helloGit.txt,而且没有将其添加到暂存区域时,如果使用git status命令,你会得到类似于下面的输出(中文):
|
|
或者这种(英文):
|
|
这是什么?这是提示你工作区有被修改的文件,未提交至暂存区。 当你执行完git add之后,会得到类似于下面的输出:
|
|
或者这种:
|
|
这是在提醒你,暂存区有哪些内容需要提交到本地仓库。
其实git status命令用来查看当前工作区的状态,即有哪些已经修改,还尚未提交到暂存区的文件。在实际的开发过程中,面对复杂的程序文件,你经常需要查看一下,自己对哪些文件做了修改,此时git status命令就很有用了。
撤销修改
checkout命令用法如下:
|
|
这样就能把已经添加到本地的helloGit.txt从暂存区中移除。
提交修改到本地仓库
如何将修改提交到本地仓库
将修改添加到暂存区,只是将你的工作暂时保存,并没有添加到本地的仓库中。这个过程可以类比写文件,将修改添加至暂存区,就相当于把内容先放入缓存区。因此,我们必须将工作区的内容提交到本地版本库去,才算是真正地保存了修改。
提交修改到本地仓库,使用命令git commit,其使用方式如下所示:
|
|
-m参数后面跟的是本次提交的具体内容,用来说明你这次的提交,主要是做了哪些修改,这个说明内容是必须的。
解析commit的输出结果
在执行完git commit命令之后,会得到类似于下面的返回结果:
|
|
其中:
- “添加helloGit.txt”为“-m”的参数,即执行的命令为git commit -m “添加helloGit.txt”;
- “1 file changed, 0 insertions(+), 0 deletions(-)” 提示改动信息;
- “37302ce”这个字符串则是本次提交的Id,commit Id唯一对应一次提交。
令人惊喜的git log和git status
当执行完git commit后,如果你试着执行以下git log你可能会得到如下的输出:
|
|
其中:
- “commit 37302ce99137cf30fabc14784d23ea63cadb928b”中的后面这一串字符就是完整的commit id;
- “Author”就是这次提交的作者,它就是我们在git config中配置的user.name;
- 最后输出的“添加helloGit.txt”,是我们在提交时添加的信息。
如果有多次提交即commit,在执行git log时,会输出每一次的提交的具体信息。这样的话,什么时候(Date)由什么人(Author)提交了什么内容(“添加helloGit.txt”)就一目了然了。
入门远程版本库
克隆操作
克隆,顾名思义,就是要获取远程版本库的完整拷贝。通过克隆操作,你可以将整个远程版本库的各种细节复制到本地,并且会建立起本地版本库和远程版本库的对应关系。
克隆操作需要用到的命令是git clone,它的具体用法如下所示:
|
|
通过这样的操作,就能将远程版本库复制到本地了,而且会默认克隆到sample文件夹下(对应于远程版本库地址中指定的sample)。同时,你也可以根据需要,指定克隆到其他目录下,其命令格式为:
|
|
这样就能将代码都复制到指定目录下。
Git服务器
在团队开发中,我们必须选用一台主机做为Git服务器来存放远程版本库。这样团队中的每个开发者,就可以基于一个共同的远程版本库进行开发。目前提供代码托管(即可以将远程版本库存放于其上的)的平台有Github、码云等,同时我们也可以搭建一台私有的运行Git的服务器,来做为远程Git服务器。Github等平台的使用,及本地Git服务器的搭建,会在后续的实训中具体介绍。本地Git服务器,可以配置不同的连接方式,如shell、git或bash。为了给挑战者提供一个便利的实训环境,我们为每个人配置了一台本地Git服务器,并允许以bash方式进行操作,即可以通过类似于/home/sample.git这种形式的地址,做为远程仓库地址进行操作,而不是像https://sample.git这种形式。
添加远程版本库
添加远程版本库需要用到的命令是git remote add,其命令格式为:
|
|
使用示例如下:
|
|
这样就将https://sample.git添加为远程仓库,并将其命名为origin。
推送本地内容到远程仓库
推送本地内容时,会将所有未推送至远程仓库的内容,都提到远程仓库。它用到的命令是git push,使用方法如下:
|
|
具体的使用方法如下:
|
|
这样就将本地分支的内容,推送到远程仓库origin的master分支了。 git push的另外一种用法如下:
|
|
-u参数的作用是,建立起本地master分支和远程master分支之间的对应关系,下一次如果再推送master分支,就可以忽略远程分支名了,如下所示:
|
|
拉取远程分支到本地
拉取远程仓库的内容到本地,需要使用git pull命令,其命令格式为:
|
|
其使用示例如下:
|
|
但是,在使用过程中,也可能会出现一种情况:远程分支和本地分支对同一内容做了修改,这就会导致将远程分支的修改,合并到本地分支的时候发生冲突。这个时候,可以选择解决冲突,然后合并(解决冲突会在后续的实训中介绍)。也可以选择直接强制拉取,使用远程分支的修改,覆盖本地分支的修改。强制拉取需要用到-f参数,语法格式如下:
|
|
具体的使用示例如下:
|
|