[Git] 代码管理之 Git(一)

Git 简介

当我们开发一个产品的时候。所有的代码并不是一气呵成全部一次性完成的,肯定是经过多个步骤,大项目甚至会多人好几个月甚至几年共同开发而成的,而这个过程中,我们的代码要形成很多个版本,好比(图片摘自网上)
在这里插入图片描述
这么多的版本,不好管理,同时也不好知道下一个版本相对于上一个版本到底修改了哪里。正是基于无论是文章还是软件的管理混乱这个初衷,软件版本管理工具横空出世。

软件版本管理工具主要可分为两类,一个是集中式版本管理,代表就是SVN
在这里插入图片描述
集中式软件版本管理工具具有一台中心服务器,软件的最终版本存在与中心服务器上,叫做 SVN Repository,即SVN仓库,所有的开发人员从服务器拉取代码,修改代码,提交代码,中央服务器集中管理,这种管理方式比较简单,使用起来不难容意上手,但是这样的管理方式有一个致命的问题,就是用户本地没有仓库的历史信息,所有版本信息全部保存在中央服务器,意味着只要中央服务器宕机了,则所有的资料都随之消失不见,虽然现在服务器的可用性增强很多,容灾备份也做得很好,但是运维维护代价也很高,使用的人已经不多了(不排除一小部分一起基于开发环境的简单而一直使用svn)

git是一种分布式的代码管理工具,每个授权用户都管理着所有的版本信息,即使任意的一个用户的信息丢失了,也可以从服务器恢复之前的版本信息,而不用担心有历史信息的丢失。
在这里插入图片描述

Git 安装

在git的官方网站,有git的安装详细说明,对于Windows直接可以下载一个exe执行文件,对于Linux,有各个版本的安装命令,安装非常简单,就是一句命令的事,之后在cmd窗口中执行git 命令后,如果出现相关的帮助信息则表示安装成功。

安装完成后就需要开始配置了,我们安装完后的初始界面是这样的,这里以Windows下的Git bash为例。新建一个文件夹,作为库内容存放的地方,然后在当前目录下启动Git bash,就可以开始配置了。
配置的目的主要是为了设置用户名称和邮件地址,因为每一次的git提交都会使用这些信息,它们将会被写入到提交报告中,而且不可以更改的。
配置用户名

git config --global user.name "Richard_li"

配置邮箱地址

git config --global user.email starxi***[email protected]

查看我们做的配置

git config --list

git做全局配置这里的参数中 --global 表示全局设置,也就是说本台计算机所发出的所有提交信息在没有额外指定的情况下全部以这个设置为准。如果某一个项目不想以该设置进行提交的话,可以在项目内部执行git config 然后使用不加 --global 的配置语句进行配置。

git还有很多其他的配置,可以参照git 的官方帮助文档,或者直接命令git --help来查看文档。英文阅读有困难的朋友,可以看看官方提供的中文文档

创建仓库

首先,什么是仓库呢,仓库其实就是一个由git管理的目录,这里目录里的所有的文件,所有的目录,都会由git记录下来,每一次修改,每一次删除,都会在git中有记录,这个仓库是可以有后悔药吃的,当你失误删除了文件,当你失误修改了不应该修改的文件,都是可以回退到以前的版本的。

那为了让git能管理当前我们新建的文件夹,首先我们得在这个文件夹下新建一个仓库。

新建仓库这个概念就好比,当你新建了一个文件夹的时候,就好比是新建了一个用于当作仓库的房子,但是即使我们知道这个房子要作为仓库用,但是没有相应的管理人员,记录系统,门禁等等设置的话,它就仅仅只是一个房子,所以新建仓库的概念就是在已有的这个空房子的基础上把各项用于仓库管理的设施搭建起来。git的话会自动新建一些文件来记录你的对当前文件夹的每一次改变。

新建一个仓库使用的命令是

$ git init
Initialized empty Git repository in D:/Workspace/git_test/.git/

对,只需要执行这么一条命令,git仓库就被搭建起来并且初始化了。那执行这个命令以后,git系统到底做了些什么呢,打开系统的显示“隐藏的目录”这个选项,可以看到,在当前目录下,有一个以点开头的名称为 .git 的文件夹被生成了,里面包含了一系列的文件:
git新建仓库的隐藏目录
这些目录中的文件会记录仓库中的文件以及目录的所有改动,以及实现回滚等一系列功能。这个时候我们使用

git status

来查看下当前仓库的状态,显示如下
初始仓库的状态
显示了如下信息

  • 当前位于master 的分支上
  • 至今没有过提交
  • 没有需要提交的内容(创建或拷贝文件然后使用git add来追踪)

向仓库提交文件以及查看仓库状态

在解释上面的一些概念之前,首先我们添加一些文件到仓库里来看看,如图,我添加了五个文件到当前仓库
往git仓库中添加文件
然后再到bash中查看git 的状态
添加文件后查看git状态
之前查看git状态时候的三句内容均在,只是多了一个 Untracked files,顾名思义,未追踪的文件,意思就是说我们虽然把这些文件添加到了这个仓库中,但是这个仓库的管理系统还没有对这些“货物”进行登记造册,然后下面可以很清晰地看到我刚才添加的五个文件的文件名以红色标记显示出来。并且括号中温馨地提示了把我们将要提交的文件使用 git add + 文件名的方式进行包含。那么我们就照做:

git add test.c

这里我只添加了一个文件,来看看效果怎么样。
git add一个文件后的git status
当我git add红色标记列出的五个文件当中的一个后,可以看到Untracked files中少了那个我已经添加了的文件,而多出来了一个项目 Changes to be committed 也就是将要被提交的改动,这里,用绿色把我刚才git add的文件列出来了,标明了是new file,这里,git将我的改动文件从工作区添加到了暂存区。

工作区与暂存区的概念:我们当前存放文件的目录称为工作区,顾名思义就是我们的工作目录,就好比我们运货到了码头,然后我们通过git add我们的那些文件就是通知仓管员,我们有哪些货物(文件)将要被造册,然后这些货物(文件)在正式被放入仓库之前就被放到了仓库门口的警备室(暂存区)等待报备。

下面我将所有的文件全部添加到暂存区,这时,除了将所有的文件名一个个地列出到git add后这种方法之外

git add LICENSE README cJSON.c cJSON.h

如果我们是想将当前所有untracked files都放置到暂存区的话,我们可以使用下面的命令

git add .

以一个点代替当前未放入暂存区的所有文件,这样,可以将untracked files 全部放入暂存区。
所有文件放入暂存区
这样,所有的文件就都列入到了Changes to be committed,所有的货物放到了警备室,准备入库造册。一旦文件被加入到了暂存区,那就不能被更改了,即使再对文件进行了更改,放入了暂存区的文件也不会随着你的更改而变化了,就好比货物已经放入了警备室,你无法再次去修改货物了,但是如果此时,我突然发现文件有错误,或者需要再修改或添加内容才能放入仓库,那此时我们可以通知警备室,将货物拿回

$ git rm --cached test.c
rm 'test.c'

我突然发现test.c文件中有一个头文件没有包含,这条命令就是将货物从警备室撤回,然后系统提示 rm ‘test.c’ 文件已从警备室撤离。这时候我们就可以开始修改test.c文件,修改的内容会反应到文件本身,修改完以后重新git add到暂存区即可。
从暂存区撤回内容后
当我们把最终需要放入到仓库中的内容全部准备好,并放入到暂存区后,接下来就是真正将货物装进仓库的命令了,也就是提交文件到仓库的命令

$ git commit test.c -m "first commit"
[master (root-commit) f7000c9] first commit
 1 file changed, 162 insertions(+)
 create mode 100644 test.c

执行commit命令即通知警卫室将暂存区的货物存入仓库,并登记造册。这里,我将test.c一个文件装入了仓库。后面跟带的 -m参数是备注,表明这一次提交的理由或者任何附加的信息,即需要登记在仓库日志上的内容。提交完test.c这个文件后,然后再用git status 查看状态时,发现被提交的那个文件已经从 Changes to be committed 列表中消失了。
commit文件后剩下的文件

接下来我将所有的文件全部commit进仓库,同样也可以使用之前便捷git add的方法,用点替代当前没有被commit的所有文件

这里除了用点来表示所有的文件以外,还可以使用 -a 参数来表示将当前未提交的文件全部提交

$ git commit . -m "fist commit"
[master ee44e6d] fist commit
 4 files changed, 1166 insertions(+)
 create mode 100644 LICENSE
 create mode 100644 README
 create mode 100644 cJSON.c
 create mode 100644 cJSON.h

# 下面的命令有同样的效果
$ git commit -a -m "fist commit"

提示我4个文件更改了,一共有1166个插入。

这个插入的意思就是我们向文件中写入内容的字节书。

接下来我们再使用git status看看状态

$ git status
On branch master
nothing to commit, working tree clean

相比起最初,no commits yet这句话不见了,同时第三句话也由 nothing to commit, (create/copy files and use “git add” to track) 变成了 nothing to commit, working tree clean,没有需要提交的内容,工作树干净。意思就是当前工作区的所有内容全部正在被追踪,这是正常的状态。

当我们提交了多次后,如果想查看之前提交的记录的话,即查看货物的入库记录的话,可以使用

git log --stat

来查看提交记录
Commit记录
如图,共计有两次提交,提交人为 Richard_li,后面附带有我的邮箱,然后下面有提交的日期Date,之后是提交的时候写在 -m 参数后面引号里的内容,之后,当次提交的内容的文件更改,这里,是按照时间的倒序进行排列的,打出git log --stat命令后,最上面的信息是最近的消息,越往下是越以前的消息,可以看到第一次提交了test.c 一个文件,第二次提交更改了cJSON.c等共四个文件。

如果想在这里看到文件中所有的变动,即源代码是怎么更改的,是增加了还是删除了,可以使用

$ git log -p

查看所有的记录,如果你的文件是新添加的话,那这个文件中的所有内容都会被展示出来,内容太长,这里就不贴图片内容了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章