版本控制系统之Git学习一

mac2022-06-30  93

集中式vs分布式

集中式

CVS(Concurrent Version System)与SVN(Subversion)属于集中式的版本控制系统,集中式表示版本库是集中存放在中央服务器的,而工作的时候用的是自己的电脑,所有要先从中央服务器取得最新的版本,工作完后,再推送到中央服务器。这种方式最大的缺点就是必须联网才能工作,当遇到网速比较慢时,上传和下载所需要的时间都比较长,一定程度上影响了工作。

分布式

分布式版本控制系统没有中央服务器概念,每个人的电脑都是一个完整的版本库,此时不需要联网就可以正常工作。 那多人如何进行协作呢?A在自己的电脑上修改了文件X,B也在自己的电脑上修改了文件X,此时,AB之间只需将各自的修改推送给对方,就可以看到对方的修改。 分布式版本控制系统相比于集中式来说,安全性更高。 实际工作中,分布式版本控制系统通常有一台充当“中央服务器”的电脑,但作用仅仅是用来方便“交换”大家的修改。

Git安装

输入以下命令,查看是否安装git

git

若打印出git的相关使用信息,则表明安装成功; 在linux上安装

sudo apt-get install git

若系统为Mac 首先安装homebrew,然后通过homebrew安装Git,具体参考http://brew.sh/

Git 使用

创建版本库

版本库又名仓库,可以理解为一个目录,这个目录里的所有文件都可以被git管理起来,每个文件的修改、删除,git都能跟踪。 创建版本库的方法(在非空目录下也可以创建)

mkdir learn_git cd learn_git git init

此时创建一个空的仓库,并且在当前目录下生成了一个.git的目录,这个目录是git用来跟踪版本管理库的。 输入命令,就可以看到,以.开头的目录,默认是隐藏的

ls -ah

把文件添加到版本库

注意⚠️:版本控制系统只能跟踪文本文件的改动,如TXT文件、网页、程序代码等。git会告诉你每次的改动,如添加了2行,而图片、视频等二进制文件,git无法跟踪其变化,只能把二进制文件每次改动串起来,即只知道图片从10KB改成了50KB。

将文件添加到git版本库,需要两个操作: 1.输入命令(file文件是已经编辑好的文件)

git add file.txt

2.输入命令

git commit -m "wrote a file.txt"

git commit是将文件添加仓库,-m后面输入的是本次提交的说明,可以输入任意内容。 git commit可以一次提交很多文件,如以下命令

git add file1.txt file2.txt git add file3.txt git commit -m "add 3 files."

当需要将文件进行修改,然后把修改提交到git版本库中,具体操作步骤是,将文件进行修改,然后重新执行一遍将文件添加到版本库的操作。

当然,当仓库中没有新的文件添加,可以使用命令:

git commit -a

-a 参数表示自动添加已跟踪文件(即之前提交过的文件)中的改动。 命令执行后,会弹出编辑器,此时,可以写入描述性的提交信息。

版本回退

文件经过多次修改之后,提交到版本库,可以使用命令

git log

git log命令显示从最近到最远的提交日志 另外,可以加上参数–pretty=online查看简化版的日志

git log --pretty=oneline

打印结果如下(已经修改过三次file.txt文件) 此时,打印的结果是一大串类似于7f9436…,表示的是commit id版本号; 若此时想将当前版本回退到上一个版本,可以使用

git reset --hard HEAD^

在git中,用HEAD表示当前版本,HEAD^表示上一个版本,… 此时,按照同样的方法,可以再回退到最开始的那个版本(目前一共编辑了3个版本) 若此时要重新回到第三次提交的那个版本要怎么操作呢? 此时要保证当前命令行窗口没有关闭过 第一步: 顺着命令行窗口的打印信息,找到回退之前的log信息,并提取出第三次提交的那个版本的commit id,即7f9436…那一串 第二步:

git reset --hard 7f9436

commit id 只需写前几位就行,git会自动去找

若找不到commit id 要怎么办呢?比如已经关机 此时可以输入命令

git reflog

这个命令用来记录你的每一次命令,从这个命令的输出结果去查找commit id,再进行reset就可以了。

git版本回退的原理: git在内部有个指向当前版本的HEAD指针,当需要回退版本的时候,只需将HEAD指向所需要的版本号。

最新回复(0)