读前提示
注意:
本文只是面向初学者或者之前并未接触过git而想学习如何初步使用git的读者,如果您很擅长使用git,并善于维护远程仓库,那么不建议您看此篇文章,这会浪费您的时间。
当然,这篇文章还是能很好地告诉初学者如何简单的运用git的,比如三板斧这种简单的操作。
当然,看完这篇文章,还需要多多练习,才能熟练的使用这些命令行。
话不多说,我们直接开始。
文末附有相关参考链接。
前言
前几天上课的时候,老师说git的功能很多,有兴趣可以研究研究,今天趁着有时间,就来探索一番。
简介
git是什么
Git是一个开源的分布式版本控制系统(VCS),可用于对代码版本的控制、分支管理等。 是LinusTorvalds为了帮助管理Linux内核开发而开发的一个开放源码的版本控制软件。
并且,Git还是目前世界上最流行的分布式版本控制系统
Torvalds 开始着手自己开发 Git 是为了作为一种过渡方案来替代 BitKeeper(因为BitKeeper向他要钱)
使用git的好处
写代码是需要多人协作的,修改是不可避免的,然而我们既不希望因为多次修改而产生过多的文件,又希望能记录每次更改的内容。
所以,使用git就可以满足我们的需求。
一些注解:
版本控制系统:
因为项目是在不断地迭代开发的,所以就需要一个控制系统来记录某些代码是哪个版本的,这样在出问题时,方便去修补
版本控制系统可以理解为一个”数据库“,他会显示出当前版本与上一版本之间所有改动的细节。
git与svn
二者都是版本控制系统,下面就介绍一下二者各自的优劣
SVN
SVN是集中式的版本控制系统,它以一个服务器作为大本营,所有的代码提交到服务器进行统一的管理。当需要对代码进行改动时,需要先从服务器上下载一份拷贝,修改完成后,还需要上传回服务器。如图:
注意:
虽然在这个控制系统下,代码的一致性非常高,一对多的模式使管理员能轻松控制每个开发者的权限。
但,集中式版本控制系统是需要联网才能工作的,具有一定的局限性,且不适合人数较大的项目开发。
GIT
结构如图:
优点:
不需要联网就能进行修改。因为版本都是在自己的电脑上,随时都可以将所做的修改提交到本地仓库,然后将本地版本仓库推送到远程版本仓库进行合并。
缺点:
GIT的缺点可能就是:难学,不好懂,精通要花很长时间(捂脸)。
下载与安装
多提一句:64位的机器就下64位的,32位的机器就下32位的。
git下载官网
过程图解:
此处的“only show …”要勾上,然后就一直点下一步即可。
这里勾选上第一个选项“Launch …”
安装完之后,右击鼠标能看到下面两个图标
我们一般使用后者,也就是Git Bash Here
即通过命令行的方式使用Git,点开后如图:
Git的使用:
开始
如果你是第一次使用Git的话,需要先创建一个新的目录。
可以创建多个,并且可以创建在不同的文件夹里。
mkdir test//创建一个目录名为test的目录
git init//初始化这个目录,让Git开始对这个目录进行版本控制
设置用户名和邮箱
因为Git是分布式版本控制系统,所以每个分支都要有自己的名字和邮箱,所以下载完后的第一步就是设置邮箱和地址。
格式如下:
$ git config --global user.name "Your Name"
$ git config --global user.email "email@example.com"
第一行:设置用户名,即在绿色部分输入你自己设置的用户名。
第二行:设置邮箱地址
提示:
git init这个命令会在之前创建的目录中创建一个名为.git的隐藏目录,并在其中创建一个版本库。该目录是隐藏文件,点击查看->显示隐藏目录,就能看到了,这个目录还是挺重要的,之后会详细讲解。
设置完之后,有的同学想检查一下自己设置是否成功,在此介绍两种方式
1.使用命令行
检查已有的配置信息(包含用户名和邮箱地址),使用 git config --list 命令:
git config --list
然后在图中能看到相应的用户名和邮箱地址。
(此处我把邮箱地址打上了码,正常情况下是会显示的)
2.找到对应文件
选择用写字板打开后,可以看到,name处就是自己设置的用户名,email处就是邮箱地址。
提示:
如果不想使用命令行,在此处直接修改用户名和邮箱地址也是可以的。
文件的状态
在学习完如何简单的使用Git后,我们来了解一下文件的状态,如图:
此处我们选择两个进行详细介绍。
untracked:未跟踪
未跟踪,即文件在文件夹中,但没有加入到git库中,不参与版本控制。
可通过git add 使其状态变为Staged
tracked已跟踪
被纳入版本控制,分三种状态:
1.unmodified
文件入库、未修改,被修改后变为modified
2.modified
文件已修改,可通过git add进入staged状态,或通过git checkout丢弃修改,而返回到unmodified状态
3.staged
暂存状态,可通过git commit可将修改同步到库中,这时库中的文件和本地文件又变为一致,文件为unmodified状态,或通过git reset HEAD filename 取消暂存,使文件状态变为modified
一些帮助理解的图
查看文件状态的命令
可使用
git status
如图:
(真的好掉画质,不知道大家能不能看清我写的字……)
或
git status -s
这样就只显示未提交的文件
文件加入暂存区
加入与取消命令
加入:
git add
取消:
git rest 文件名
//或使用
git rm -- 文件名
//二者等价
细致的区别
git rm – cached是从stage(index,暂存区)里面删除文件,当你提交(commit)之后文件就会删除了。
git reset HEAD – file:回退暂存区里的文件(还原为HEADcommit里面该文件的状态),会撒销从上一次提交(commit)之后的一些操作。如果是对于新增文件,这两个操作是等效的。
git rm – cached作用:对于缓存来说,这个命令是从索引里删除文件。如果要删除的文件已经在仓库里了,git rm – cached将会从索引里删除该文件,但本地工作目录还会保存源代码,提交之后将会同时从仓库里删除该文件。
而git reset HEAD file(命令默认参数为–mixed)不同于文件已经在仓库中,该命令的作用是用repo(HEAD)替换index中file的版本,使file的版本回退到HEAD版本
操作过程如图
添加(加入):
取消:
文件提交与删除(关键的一步)
关系图:
文件的提交
git commit -m ‘提交的信息’
参数m:
·-m:本次提交做了什么事,只要简单、清楚的文本说明即可,中英文都可以,重点是说清楚,能让自己和别人很快明白就行。
如果不加m参数,会进入类似vim编辑。
如果不小心忘记输入-m
会进入如下界面:
此时可以按Esc然后输入
:wq!
即可回到刚才的页面
如果正确提交后,再查看目录,会是如下画横线的显示
补充说明
下面补充一些vim的命令
:q //退出
:q! //退出且不保存(:quit!的缩写)
:wq //保存并退出
:wq! //保存并退出即使文件没有写入权限(强制保存退出)
:x //保存并退出(类似:wq,但是只有在有更改的情况下才保存)
:exit //保存并退出(和:x相同)
:qa //退出所有(:quitall的缩写)
:cq //退出且不保存(即便有错误)
文件的删除
git rm 文件名
提示;
删除文件,只是删除工作目录中的文件,在版本库中文件还是存在的。删除文件会直接把这个文件放入暂存区。
恢复已被删除的文件/目录
先使用rm命令,删除项目中所有的html文件
rm *.html
ls -al
再使用git checkout命令:
git checkout index.html
提示:
需先将文件提交到暂存区/版本库里,才能使用rm和checkout 命令,不然本次删除是和git无关的
也就是说需要先使用add/commit命令
注意:
当使用git checkout命令时,Git会切换到指定的分支。
但如果后面接的是文件名或路径,Git则不会切换分支,而是把文件从.git目录中复制一份到当前的工作目录。更精准地说,这个命令会把暂存区中的内容或文件拿来覆盖工作目录中。
文件的忽略
为什么要忽略
一般我们总会有些文件无需纳入Git的管理,也不希望它们总出现在未跟踪文件列表。通常都是些自动生成的文件,比如日志文件,或者编译过程中创建的临时文件等。在这种情况下,我们可以在工作目录中创建一个名为.gitignore的文件(文件名称固定),列出要忽略的文件模式。
忽略规则
此处以一个目录名为public的目录和文件名为class的文件举例
/ 表示:当前文件所在目录
忽略pubilc下的所有目录的文件
/public/*
不忽略/public/class. 这个特例的文件,意思就是class这个文件不忽略:
!/public/class
忽略具体的文件:
index.class
忽略所有的class 文件:
*.class忽略 a.class 和 b.class这两个文件 :
[ab].class
注意:
匹配规则和linux文件匹配一样 ·
以斜杠"/“开头表示目录
以星号“*”通配多个字符
以问号”?“通配单个字符
以方括号”[]“包含单个字符的匹配列表
以叹号”!"表示不忽略(跟踪)匹配到的文件或目录
忽略步骤
a 创建.ignore文件
两种方式:
1.直接相应文件夹里创建
2.使用touch命令
touch .ignore
b 在.ignore文件内部编写规则
此处的编写可以参考上文的编写规则。
日志的操作和使用
查看日志
git log
细节
a、 上一页 按空格
b、 下一页 按b
c、 退出 按q
d、 不分页 输入命令:
git --no-paper log
参数:
–graph 查看分支合并图
–oneline 标记把每一个提交压缩到一行中
远程仓库!
我们前面介绍过了,文件从工作区经过add命令提交到暂存区中,再通过commit命令提交到本地仓库。
但是,日常生活中编写代码,大多是多人协作的方式,所以将代码提交到远程仓库,会更方便。
常用的Git代码托管平台
推荐一些托管平台,我也会在后面写出他们的区别,大家可自行选择。
1.GitHub
点击此处跳转至网页
2.Gitee
点击此处跳转至网页
3.GitLab
点击此处跳转至网页
github和gitee的区别:
GitHub是全英文并且用户基数多,知名的库也多,但在国内访问Github偶尔会有不稳定情况
Gitee全是中文,而且大部分用户都是国人,优秀的库相对于GitHub也少,但Gitee不会出现不稳定情况。
GitHub GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。
GitHub 于 2008 年 4 月 10 日正式上线,除了 Git 代码仓库托管及基本的 Web
管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过
350 万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。
Gitee Gitee 提供免费的 Git 仓库,还集成了代码质量检测、项目演示等功能。对于团队协作开发,Gitee
还提供了项目管理、代码托管、文档管理的服务,5 人以下小团队免费。
我个人使用的是gitee,大家选择什么就根据自己喜好和需求去选择吧~
使用步骤
注册和使用步骤可以上b站或者其他的平台自行搜索,或者看我文章底部贴上的视频链接
下文只是简单介绍
这里大致说一下:
第一步创建代码仓库(仓库的名称、仓库的简介、提交代码的邮箱等等)
第二步上传自己的代码托管到远程仓库
一张有点用处但不多的图:
创建远程仓库
将远程仓库与本地仓库建立联系:
使用命令:
git remote add shortname ur1
shortname:远程仓库的名字(自定义)
ur1:远程仓库的地址
查看远程仓库
如果想查看已经配置的远程仓库服务器,可以运行git remote命令。
它会列出指定的每一个远程服务器的简写。如果已经克隆了远程仓库,那么至少应该能看到origin,这是Git克隆的仓库服务器的默认名。
语法命令:
有两种方式
git remote
注意,该仓库必须和仓库有联系才可以
git remote -v
-v列出详细信息verbose
克隆远程仓库
如果你想获得一份已经存在了的Git仓库的拷贝,这时就要用到gitclone命令。
Git克隆的是该Git仓库服务上的几乎所有数据(包括日志信息、历史记录等),而不仅仅是复制工作所需要的文件。当你执行gitclone命令的时候,默认配置下远程Git仓库中的每一个文件的每一个版本都将被拉取下来。
语法结构:
git clone 远程仓库地址ur1
要记住自己的用户名和密码
移除无效的远程仓库
语法命令:
git remote rm 远程仓库名字
注意:
此命令只是从本地移除远程仓库的记录,并不会真正影响到远程仓库
结语
好啦,本文到此就结束了,很感谢您能看完这篇又长又有些枯燥的文章,希望您能有所收获,我们下次见~
参考资料/视频
本文参考视频
【gitee(码云)的注册和代码提交【手把手】-哔哩哔哩】
【『教程』一看就懂!Github基础教程-哔哩哔哩】
【第14讲 Git GitLab 简介使用-哔哩哔哩】