Featured image of post Git入门版本库和入门远程版本库

Git入门版本库和入门远程版本库

4214 words

入门版本库

本地版本库创建

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系统下,上一级目录可以用‘..’代替,如:

1
2
3
4
5
6
#进入上一级目录
cd ..
#进入上一级目录的再上一级目录
cd ../../
#进入上一级目录下的helloGit
cd ../helloGit

使用Git前的准备

安装

Git可以使用源码安装,具体的安装过程请参考Git官网教程或者Github上Git仓库的用户指南。

但对于初学用户,还是建议大家直接安装。

  • Linux下安装:
1
2
3
4
#Fedora下安装
yum install git-core
#Ubuntu等Debian类体系结构系统下
apt-get install git
  • Mac上安装:

  在 Mac 上安装 Git 有两种方式。可以使用图形化的 Git 安装工具,网址为图形化Git工具安装地址;另一种是通过MacPorts 安装。如果已经装好了 MacPorts,请用下面的命令安装 Git:

sudo port install git-core +svn +doc +bash_completion +gitweb

Windows下安装:

  在 Windows 上安装 Git,可以到 Git官网 的页面上,下载 exe 安装文件并运行:

  Git官网下载

  完成安装之后,就可以使用命令行的 git 工具了。建议大家最好使用Unix风格的shell来运行Git。另外,Linux也有其他图形化的Git工具,如Tortoisegit。不过,还是建议大家直接使用shell来运行Git。

Git配置

由于Git是一个分布式的版本控制系统,所以当利用它进行分工协作时,必须区分不同的机器。这一点可以通过配置机器的名字和邮箱完成。Git初始使用时,也会提示进行配置。配置命令如下:

1
2
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"

在实际的使用过程中,可以将“Your Name”、“email@example”替换为自己实际的名字和邮箱。

如何创建一个本地版本库

首先,我们需要创建一个目录,做为我们的本地版本库,然后使用git init命令,将其初始化为一个本地版本库,如下:

1
2
3
4
5
6
#在/home目录下,创建repo目录
mkdir /home/repo
#进入repo目录
cd /home/repo
#将repo初始化为一个本地版本库
git init

通过上述命令,即可在/home目录下,创建repo目录,并将其初始化为一个版本库。

添加修改到暂存区域

如何将修改保存到暂存区

本地版本库就相当于一个存放在本地的仓库,里面记录了我们本地文件的各种版本及不同版本之间的差异。当我们添加、删除或者修改了文件之后,我们必须将修改添加至工作区以暂时保存(Git的工作原理请认真阅读背景知识部分)。

添加修改,并保存至工作区,需要用到git add命令,git add命令的使用方式如下所示:

1
2
3
4
#添加所有修改
git add .
#添加hello.txt文件
git add hello.txt

如上所示,当需要添加所有文件至工作区时,使用git add .,如果想添加指定文件,只需要像示例中添加hello.txt一样,将文件名做为参数名,传给git add即可。

查看工作区状态

当你创建完helloGit.txt,而且没有将其添加到暂存区域时,如果使用git status命令,你会得到类似于下面的输出(中文):

1
2
3
4
5
6
7
8
9
# 位于分支 master
#
# 初始提交
#
# 未跟踪的文件:
#   (使用 "git add <file>..." 以包含要提交的内容)
#
#    helloGit.txt
提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

或者这种(英文):

1
2
3
4
5
6
7
8
9
On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   src/gitTraining

no changes added to commit (use "git add" and/or "git commit -a")

这是什么?这是提示你工作区有被修改的文件,未提交至暂存区。 当你执行完git add之后,会得到类似于下面的输出:

1
2
3
4
5
6
7
8
9
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
#   (使用 "git rm --cached <file>..." 撤出暂存区)
#
#    新文件:    helloGit.txt
#

或者这种:

1
2
3
4
5
6
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD <file>..." to unstage)

        modified:   src/gitTraining.java

这是在提醒你,暂存区有哪些内容需要提交到本地仓库。

其实git status命令用来查看当前工作区的状态,即有哪些已经修改,还尚未提交到暂存区的文件。在实际的开发过程中,面对复杂的程序文件,你经常需要查看一下,自己对哪些文件做了修改,此时git status命令就很有用了。

撤销修改

checkout命令用法如下:

1
git checkout helloGit.txt

这样就能把已经添加到本地的helloGit.txt从暂存区中移除。

提交修改到本地仓库

如何将修改提交到本地仓库

将修改添加到暂存区,只是将你的工作暂时保存,并没有添加到本地的仓库中。这个过程可以类比写文件,将修改添加至暂存区,就相当于把内容先放入缓存区。因此,我们必须将工作区的内容提交到本地版本库去,才算是真正地保存了修改。

提交修改到本地仓库,使用命令git commit,其使用方式如下所示:

1
git commit -m "示例提交"

-m参数后面跟的是本次提交的具体内容,用来说明你这次的提交,主要是做了哪些修改,这个说明内容是必须的。

解析commit的输出结果

在执行完git commit命令之后,会得到类似于下面的返回结果:

1
2
3
[master(根提交) 37302ce] 添加helloGit.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 helloGit.txt

其中:

  • “添加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你可能会得到如下的输出:

1
2
3
4
5
commit 37302ce99137cf30fabc14784d23ea63cadb928b
Author: hdu <hdu@163.com>
Date:   Sun Dec 24 23:35:48 2017 +0800

    添加helloGit.txt

其中:

  • “commit 37302ce99137cf30fabc14784d23ea63cadb928b”中的后面这一串字符就是完整的commit id;
  • “Author”就是这次提交的作者,它就是我们在git config中配置的user.name;
  • 最后输出的“添加helloGit.txt”,是我们在提交时添加的信息。

如果有多次提交即commit,在执行git log时,会输出每一次的提交的具体信息。这样的话,什么时候(Date)由什么人(Author)提交了什么内容(“添加helloGit.txt”)就一目了然了。

入门远程版本库

克隆操作

克隆,顾名思义,就是要获取远程版本库的完整拷贝。通过克隆操作,你可以将整个远程版本库的各种细节复制到本地,并且会建立起本地版本库和远程版本库的对应关系。

克隆操作需要用到的命令是git clone,它的具体用法如下所示:

1
git clone https://sample.git

通过这样的操作,就能将远程版本库复制到本地了,而且会默认克隆到sample文件夹下(对应于远程版本库地址中指定的sample)。同时,你也可以根据需要,指定克隆到其他目录下,其命令格式为:

1
git clone xxx.git "指定目录"

这样就能将代码都复制到指定目录下。

Git服务器

在团队开发中,我们必须选用一台主机做为Git服务器来存放远程版本库。这样团队中的每个开发者,就可以基于一个共同的远程版本库进行开发。目前提供代码托管(即可以将远程版本库存放于其上的)的平台有Github、码云等,同时我们也可以搭建一台私有的运行Git的服务器,来做为远程Git服务器。Github等平台的使用,及本地Git服务器的搭建,会在后续的实训中具体介绍。本地Git服务器,可以配置不同的连接方式,如shell、git或bash。为了给挑战者提供一个便利的实训环境,我们为每个人配置了一台本地Git服务器,并允许以bash方式进行操作,即可以通过类似于/home/sample.git这种形式的地址,做为远程仓库地址进行操作,而不是像https://sample.git这种形式。

添加远程版本库

添加远程版本库需要用到的命令是git remote add,其命令格式为:

1
git remote add “远程仓库名” “远程仓库地址”

使用示例如下:

1
git remote add origin https://sample.git

这样就将https://sample.git添加为远程仓库,并将其命名为origin。

推送本地内容到远程仓库

推送本地内容时,会将所有未推送至远程仓库的内容,都提到远程仓库。它用到的命令是git push,使用方法如下:

1
git push 远程仓库名 本地分支名 远程分支名

具体的使用方法如下:

1
git push origin master master

这样就将本地分支的内容,推送到远程仓库origin的master分支了。 git push的另外一种用法如下:

1
git push -u 远程仓库名 本地分支名 远程分支名

-u参数的作用是,建立起本地master分支和远程master分支之间的对应关系,下一次如果再推送master分支,就可以忽略远程分支名了,如下所示:

1
2
3
4
#初次推送
git push -u origin master master
#再次推送
git push origin master

拉取远程分支到本地

拉取远程仓库的内容到本地,需要使用git pull命令,其命令格式为:

1
git pull 远程主机名 远程分支名 本地分支名

其使用示例如下:

1
2
#将远程仓库origin的master分支的内容拉取到本地master分支
git pull origin master:master

但是,在使用过程中,也可能会出现一种情况:远程分支和本地分支对同一内容做了修改,这就会导致将远程分支的修改,合并到本地分支的时候发生冲突。这个时候,可以选择解决冲突,然后合并(解决冲突会在后续的实训中介绍)。也可以选择直接强制拉取,使用远程分支的修改,覆盖本地分支的修改。强制拉取需要用到-f参数,语法格式如下:

1
git pull 远程主机名 远程分支名 本地分支名 -f

具体的使用示例如下:

1
2
#将远程仓库origin的master分支的内容拉取到本地master分支
git pull origin master:master -f
使用 Hugo 构建
主题 StackJimmy 设计