用Git管理你的代码

Posted by hebicheng on April 15, 2021

用Git管理你的代码

(以sicnu gitlab为例)

一、什么是Git

Git是一个分布式版本管理系统。

从定义上来说,Git有两个值得注意的地方:版本管理和分布式。

(1)版本管理

版本管理顾名思义就是对文档或程序的版本进行管理(git主要是针对文本文件管理)。当你将某一工作目录使用git进行管理后,此工作目录下的任何文件的修改都会被git记录,这可以让你在任何时候回退和查看其中某一个版本。

(2)分布式

相对于SVN等版本管理工具,git是分布式的,你创建的每一个git仓库都是独立的,不需要像SVN一样去一个中央服务器上传或拉取文件。

image-20201201111043734

图1.1 SVN 中央服务示意图

image-20201201111225188

图1.2 Git分布式服务示意图

那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件A,你的同学也在他的电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。

和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。

在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同学病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑(github、gitlab等远程仓库就相当于这个中央服务器),但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。

二、什么是GitLab、Github

如上文所说,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,github、gitlab就扮演这这个角色。

当你往远程仓库提交本地版本时,这些远程仓库其实底层也是执行的一系列git命令,只是这些操作被自动化了,让我们在使用时有更好的体验。除此之外,远程仓库还能为我们提供很多额外的服务,比如团队管理,自动化构建和部署(CI/CD)等等。下面我们就将从本地git和连接到gitlab进行学习(以下的远程仓库主要以gitlab说明)。

三、Git基本使用

(提前安装git到你的系统,https://acm.sicnu.edu.cn/storage/programs/Git-2.29.2.2-64-bit.exe )

你可以在桌面或者任意文件夹中,使用鼠标右键打开 git bash

image-20201201132659103

在这个bash中你可以执行许多linux 的命令,当然,git命令也可以。

一下两条命令可以配置你的个人信息,这个信息主要用于git识别每次的提交是谁提交的。并且推送到远程仓库后,gitlab会根据你的邮箱,自动识别你在gitlab中的用户,所以建议git本地配置的邮箱要和gitlab的邮箱一致。

1
2
git config --global user.name "your name"
git config --global user.email "your email"

(1)建立本地git仓库

git仓库的建立一般有两种方法:在本地通过git init 建立一个仓库;以及通过git clone克隆一个远程已存在的仓库(注意从远程拉取仓库只有通过git clone拉取到本地才有版本控制信息,如果是下载zip文件的方式,只会下载代码,不会有git版本控制信息),当然这种情况是你提前在gitlab上建立了仓库。这里我们先讲如何在本地创建远程仓库。

1. 进入你想要创建git仓库的文件夹

这里以test-git文件夹为例

image-20201201121620817

2. 初始化一个git仓库

使用git init命令初始化一个git仓库

image-20201201121827348

执行这个命令后,目录下会自动创建个.git文件夹,这个文件夹是隐藏的,所有的版本控制信息都在这个文件夹中,删除这个文件夹,相当于git仓库也删除了。

image-20201201122048854

3. 提交修改

版本控制的主要目的就是记录每一个版本的修改情况,下面我们通过简单的例子来演示一下。

首先在工作目录下建立一个文件reademe.txt , 并随便写一些内容。比如first write here.

image-20201201122408075

image-20201201122627194

此时使用git status 查看工作区状态:

image-20201201122801066

git 发现了这个新文件,并且显示这个文件没有被跟踪,根据提示use "git add" to track, 我们使用git add .把文件提交到暂存区,并且开始跟踪这个文件的修改。注意这个. 是表示把目录下所有没有track或没有加入暂存区的文件都加入暂存区,如果你只想把某个文件加入暂存区,就把.换成相应文件的路径。

image-20201201123221181

执行add操作后,再看看git的状态。

image-20201201123304918

现在git提醒我们, 这个文件已经可以提交了,说明它已经被跟踪修改而且加入到和暂存区。所以我们使用git commit提交这一次的修改。

image-20201201123441302

这就完成了一次版本提交,-m 是给这次版本提交一些描述信息,以方便我们知道这次版本提交是做了什么了,比如上面是“first commit“。

image-20201201123610511

使用git log 可以看到历次的提交信息。

到此git最基础的操作已经完成了!

然后我们试试修改一下这个文件,多写一行”add one line.

image-20201201123919155

此时再看看git的状态。

image-20201201124001459

git提示我们这个文件已经被修改了,但是还没有准备好被提交,所以我们先add到暂存区,再提交。

image-20201201124221420

这时再看提交历史:

image-20201201124300342

可以看到两次提交的信息。

这里只是简单介绍git的使用,更多内容比如创建分支,合并分支,版本回退等操作,请自行学习,推荐学习资源:

Git教程 - 廖雪峰的官方网站 (liaoxuefeng.com)

(2)远程仓库

1.首先在 SICNU GitLab创建一个账户:

https://acm.sicnu.edu.cn/gitlab/

2.新建一个仓库(项目)

image-20201201130114208

填写相关项目信息,由于是我们自己学校的远程仓库,所以可见性一般选内部就好。

image-20201201131313683

创建成功后,仓库是空的,根据下面的提示,我们是有一个已有的本地仓库,需要推送到gitlab,所有按照它提示的操作进行。

image-20201201131327581

git remote rename origin old-origin 这一个命令不需要做,因为我们之前没有添加过其他远程仓库。

git push 之后我们的本地仓库就推送到了gitlab!

image-20201201130923484

image-20201201131348066

提交记录也可以更方便的看到:

image-20201201131404657

还可以查看每次提交的文件差异:

image-20201201131433645

注意:推送时的操作我是使用的ssh协议推送的,如果你们没有配置ssh,默认是https协议传输。

提示的命令样式如下:

git remote add origin https://acm.sicnu.edu.cn/gitlab/xxxx

https协议会提示输入gitlab的用户名和密码。

如果你觉得输入密码麻烦,就上网自行学习一下如何使用ssh吧!

ssh公钥的放置位置:

image-20201201131918487

原创作品,转载请注明来源 https://hebicheng.github.io