日期:2024年2月27日

git的使用(1)

git是什么?

git是什么?很简单一句话就可以说清楚,git是版本控制工具。啊?版本控制工具又是什么?

要理解版本控制工具,首先你需要想象这样一个场景。假设你正在编写一段程序,或创作一篇小说。写着写着你发现写错了,需要删除刚刚编写的内容,恢复到之前的状态。这时要怎么办?ctrl + z,直接撤销到之前的操作即可,so easy。

接下来换一个场景,你依然在编写一段程序,或创作一篇小说。写着写着,忽然发现写错了,你发现三天前写的内容更好一点,需要将内容恢复到三天前的状态。天那!怎么办?ctrl + z只适用于最近编写的内容,对于三天前的内容它是不好使的。那么要怎么样才能将内容恢复到三天前的状态呢?不好意思,就现在来说我们必须手动恢复,依着你的记忆能恢复多少就恢复多少吧。

版本控制工具就是帮助我们来解决这个问题的,版本控制工具可以记录你对程序所做的每一次修改,当你需要时你可以查看到每次修改的记录,甚至可以直接恢复到修改前的状态。版本控制工具的作用就好似单机游戏中的存档功能,你可以选择在某个关键位置存储进度,这样如果后边的游戏发生事务,你可以直接选择加载进度而不需要从头再打一遍游戏。

安装git

git最简单的安装方式就是通过包管理器进行自动安装,根据操作系统不同,使用的包管理器也不尽相同,这里简单罗列几种方式

mac:

$ brew install git

Linux:

# apt-get install git

Windows(chocolatey):

choco install git

如果系统没有安装包管理器(主要是Windows系统),也可以直接下载安装包进行安装。下载地址为: https://git-scm.com/download/选择适合你计算机的版本进行安装即可,关于安装并没有什么需要赘述的,如果看不懂选项直接无脑下一步即可。

安装完成后打开你的命令行,输入git –version,如果出现了git的版本信息,证明你的git已经安装成功。

–version运行成功

配置用户信息

git安装完毕后,第一件事就是配置用户信息。用户信息的作用是标识出当前操作的用户。因为git是一个版本控制工具,可以用来记录程序的修改状态,但是一个程序不一定只由一个人修改,为了区分对文件操作的不同用户,所以这里必须要设置用户信息。用户信息主要包含两个部分:name(名字)和email(电子邮件)。此信息和用户的提交权限无关,所以正常设置即可。

设置姓名:

git config --global user.name xxx

设置电子邮件:

git config --global user.email xxx@xxx.xxx

输入时需要将xxx换成你自己的name和email,输入后不会又任何提示信息,但是别担心在这里没有消息就是最好的消息!

没有提示说明配置成功

接下来我们开始正式进入到git的使用,我们将通过几个虚拟的使用场景来演示git的使用。

场景一:使用git来管理代码

由于疫情最近不能出门,所以自己一个人在家做了一个小型的网站,网站目前的结构非常简单,根目录site中包含了一个index.html。

网站的目录结构

这个网站我并不能确定要写多久,写的过程中也有可能要反复对代码进行维护,所以我决定使用git对我的代码进行管理。但是默认情况下,文件不会被git所管理,要使用git对项目进行管理,首先要对项目进行初始化操作,以使git可以对其进行控制和管理。

初始化项目

使用命令行进入到项目目录中,执行git init对项目进行初始化操作

使用git init进行初始化操作

初始化后,在项目目录中会增加一个.git文件夹(隐藏目录)。项目的所有修改信息都会存储在该目录中。

.git目录存储了所有的版本信息,不要碰它

监视、存储文件

刚刚初始化的项目是一个空的项目,在git中并没有对任何文件进行管理。可以通过git status来查看当前项目的状态。

使用git status查看项目的状态

你会看到很多内容,但是可以暂时先不用管,我们只看其中的某一部分。Untracked files:表示的没有被追踪的文件列表。在它的下边有一个红色的index.html,这表示项目虽然被git所管理,但是在项目中有一个文件叫做index.html并没有被git管理。

如何使文件被git追踪管理呢?()中的内容已经告诉你答案了:(use "git add <file>..." to include in what will be committed)我们需要通过git add指令来控制git来将文件添加到git中,使git对改文件进行追踪管理。

git add 文件名

如果希望index.html可以被git所管理,可以使用命令git add index.html来进行操作。

调用add后,通过status查看状态

由于项目中只存在一个index.html文件,所以当调用add后,通过git status查看状态时,不会在有Untracked files的列表显示。同时,出现了一个新的内容No commits yet,该内容表示项目中存在有尚未提交的内容,也就是index.html虽然被git所追踪,但是文件中的内容并没有提交到git中存储。所以一定要知道add的作用只是将文件交给git追踪,要存储文件还需要做其他操作。

git commit 文件名 -m "信息"

commit用于提交文件,就相当于将文件存储到git中。参数-m后边需要跟着一个描述信息,来说明此次操作的目的。这个信息看起来似乎有一些麻烦,但是当你的文件存储的次数非常多通过信息可以非常便捷的了解到每次操作的具体情况,所以这个信息要认真的填写。

使用commit来提交文件
再运行git status,显示所有文件均已提交

场景二:修改、添加文件

现在继续对index.html进行修改,添加一些内容,然后再运行git status来查看状态。

修改index.html后,查看状态

Changes not staged for commit表示修改后还未提交的内容,由于index.html已经被git所追踪,所以这里可以直接通过git commit来存储文件。

文件已被追踪,修改后直接调用commit

git log用来查看git的修改日志

通过git log查看修改日志

日志中显示的信息稍微有一点多,别急慢慢看。我们提交的每一条记录都会在在这里显示,每一个commit xxxx就表示一次提交记录。commit后边的的一长串的内容是记录的id,可以通过id来将代码恢复到指定的位置。commit后边会有一个HEAD,HEAD表示当前所处的状态。目前HEAD在第一条记录上,表示我们的代码现在和第一条记录是同步的。Author表示提交记录的用户的信息,这个信息就是我们上文中设置的用户名和电子邮件。Date表示的是提交时间。Date下边的显示的就是我们提交时输入的信息。通过输入git log可以查询到所有的提交记录。

接下来,在项目中添加一个新的文件about.html。然后运行git status。

添加新文件后,运行git status

每次添加新的文件后,都需要运行git add xxx来使git追踪文件。如果追踪文件后,你改变了主意不打算再追踪该文件了,可以在删除文件后使用git rm xxx来撤销追踪。如果你仅仅想撤销追踪,而不真正的删除文件可以使用git rm xxx --cached也就是只从git缓存中删除,而不真正删除文件。

演示撤销对文件的追踪

还有一种更加极端的操作git rm xxx -f该操作会从磁盘和git中同时删除该文件,并且不能恢复,所以使用时一定要慎重。

场景三:忽略文件

git可以监控到项目目录下的文件(夹)的变化,然而并非项目中的所有文件都需要被git所管理。比如,我们使用webstorm去编辑项目时,它会自动在项目目录下创建.idea目录用来存储编辑器的配置信息,很显然编辑器的配置信息不需要被git所管理,那么如何是git忽略这个文件夹呢?

默认情况下.idea会被git管理

此时,可以在项目目录下创建一个名为.gitignore的文本文件,并在文件中添加.idea/,添加完成后你会发现.idea目录不再在未追踪文件的列表中显示。

添加.gitignore后,.idea不再显示

.gitignore用来设置不需要被git所管理的文件,在.gitignore中可以设置一系列的规则,符合这些规则的文件将会被git所忽略,不会纳入版本控制。

.gitignore的编写规则
1. 文件中的空行会被忽略
2. #开头表示单行注释
3. *表示任意个字符
4. ?表示一个任意字符
5. []中的内容都表示或的关系
6. **表示任意目录
7. /开头表示之匹配当前目录的内容
8. /结尾表示匹配目录
9. !表示取反(除了)

乍看之下,编写规则是比较复杂的。如果你觉得难以理解,这些语法不需要全部都掌握,只需要了解一下即可。开发时遇到具体问题具体解决即可。同时也可以直接从网络上下载那些编辑好的文件直接使用。这里给出一个github的.gitignore的下载地址 https://github.com/github/gitignore

关于.gitignore需要补充的是该文件也需要提交给git去管理,也需要对其执行add、commit等操作来将其提交。

提交.gitignore

以上的关于git的操作都是一些最最最基本的操作,所以如果你是第一次接触git,先来熟悉熟悉git的操作,更多的用法我们将慢慢的展开。

5 1 投票
文章评分
订阅评论
提醒
guest

1 评论
最旧
最新 最多投票
内联反馈
查看所有评论
edl666
edl666
1 年 前

打call

1
0
希望看到您的想法,请您发表评论x