本系列教程所涉开发环境,详情如下:
本系列教程在撰写过程中所涉及参考资料,详情如下:
https://git-scm.com/book/zh/v2
http://git.oschina.net/progit/
https://www.liaoxuefeng.com/wiki/896043488029600
https://marklodato.github.io/visual-git-guide/index-zh-cn.html
Git在英国俚语表示“混帐”的意思;该名字来源于 Linus 的自嘲:
I’m an egotistical bastard, and I name all my projects after myself. First Linux, now Git.
Git 是一个免费的、开源的分布式版本控制系统;它可以快速、高效地对软件开发领域的各种项目进行版本管理。
Git是Linux创始人Linus Torvalds于2005年为Linux内核开发而创作的分布式版本管理系统。
大家注意到Git的ICON图标没有呢?是不是有点像一颗带有枝蔓的树苗呢?
请从Git官网或镜像下载Git安装文件;链接如下:
https://mirrors.edge.kernel.org/pub/software/scm/git/
https://registry.npmmirror.com/binary.html?path=git-for-windows/
本教程以2.31.1为例进行讲解;图示如下:
请下载安装文件并保存至本地,图示如下:
Git中文参考文档如下:
https://git-scm.com/book/zh/v2
在此,详述Git的安装过程及其注意事项。
请双击安装文件执行安装;图示如下:
选择安装位置;图示如下:
点击Next执行下一步;图示如下:
点击Next执行下一步;图示如下:
点击Next执行下一步;图示如下:
点击Next执行下一步;图示如下:
请注意:不必修改环境变量,所以选择第一种方式;点击Next执行下一步;图示如下:
点击Next执行下一步;图示如下:
点击Next执行下一步;图示如下:
点击Next执行下一步;图示如下:
点击Next执行下一步;图示如下:
点击Next执行下一步;图示如下:
全部勾选后点击Next执行下一步;图示如下:
点击Install执行安装;图示如下:
点击Finish完成安装;图示如下:
在电脑任意位置右键菜单里选择 Git Bash Here 即可打开 Git Bash 命令行终端;图示如下:
在 Git Bash 终端里输入 git --version 查看 git 版本;图示如下:
在完成Git的安装后请配置用户签名;其作用是区分不同操作者身份。Git首次安装必须设置用户签名,否则无法提交代码。
设置签名,命令如下:
git config --global user.name 输入用户名再回车
git config --global user.email 输入邮箱再回车
查看签名,命令如下:
git config --global user.name 回车
git config --global user.email 回车
示例代码:
请注意:此处设置用户签名与以后登录 GitHub(或其它代码托管中心)的账号没有任何关系。
在此,简述Git的组成部分及其工作原理详解。
在Git中由3个本地区域和1个远程仓库构成,概述如下:
工作区(Working Directory):本地硬盘存放代码的目录叫做工作区。
缓冲区(Stage): 缓冲区又被称为index,它被当做工作区与本地仓库的过渡。在工作区的代码可通过add或stash命令将代码加入到缓冲区。
本地仓库: 缓冲区的代码通过commit命令来提交至本地仓库。
远程仓库: 本地仓库中的代码通过push命令将代码推送至远程仓库
Git文件存在四种状态,详情如下:
Untracked: 即文件未跟踪状态。表示此文件在工作区中,但并没有加入到git库不参与版本控制。在此状态下,可通过git add 将其状态变为Staged.
Unmodify: 即文件已提交至本地仓库。本地库中的文件快照内容与工作区中完全一致。该类型的文件有两种去处:如果它被修改则变为Modified;如果使用git rm移出版本库, 则成为Untracked状态。
Modified: 即文件已修改状态。该文件有两个去处:通过git add进入暂存staged状态;或者使用git checkout 丢弃已作的修改返回到unmodify状态,因为git checkout表示从库中取出文件覆盖当前被修改的文件。
Staged: 即文件暂存状态。执行git commit则将修改提交到本地库,此时本地库中的文件和工作区文件一致,文件为Unmodify状态。在该状态下若执行git reset HEAD取消暂存则文件状态为Modified。
分支是Git非常重要的概念和功能,在此对其进行详解。
在版本控制过程中常常需要同时推进多个任务。所以,可以为每个任务创建单独的分支。使用分支意味着开发人员可以把自己的工作从开发主线master上分离开来,在开发自己的分支时不会影响主线分支的运行。
对于初学者而言可以简单地把分支理解为副本,一个分支就是一个独立的副本。
假设原本只有一个主分支master,再在此基础上创建新的分支feature-game分支。当feature-game完成开发任务后,我们需要将两个分支进行合并。
合并思路
将feature-game分支合并到master主分支。所以,我们应该切换到master分支再进行合并。通俗地说:我们应该站在master分支的视角进行分支的合并。
合并步骤
当两个分支都修改了同一个文件后在合并分支可能发生冲突。通俗地说:两个分支修改同一个文件导致Git不知所措,不知道删除哪些保留哪些。所以,此时必须人为解决代码冲突。
解决步骤:
------未发生合并冲突的code------
------未发生合并冲突的code------
------未发生合并冲突的code------
<<<<<<< HEAD
master分支的代码
=======
feature-game分支的代码
>>>>>>>
其实,分支名master、feature-game 都是指向具体版本记录的指针。当前所在的分支由 HEAD决定的。所以,创建分支的本质就是多创建了一个指针。
如果HEAD指向 master,那么我们现在就在 master 分支上。
如果HEAD指向 feature-game,那么我们现在就在 feature-game 分支上。
也就是说:切换分支的本质就是移动 HEAD 指针。
在此,以示例的形式介绍Git在团队开发中协作。