Git航行指南:踏上迷人的代码管理之旅
1、版本控制
所谓版本控制(Revision control),即在版本迭代中管理版本。
版本控制是指对软件开发过程中各种程序代码、配置文件及说明文档等文件变更的管理,是软件配置管理的核心思想之一。[1]
使用版本控制方便查看修改历史记录,备份以便恢复以前的版本。
- 统计工作量
- 并行开发、提高开发效率
- 组织和保护源代码与文档
简单说就是用于管理多人协同开发项目的技术。
2、常见版本控制工具
主流的版本控制工具有以下:
- Git
- SVN
- CVS
- VSS
- TFS
目前影响力最大的且使用最广泛的是Git和SVN。
3、Git工作原理
Git分区
Git本有三个区域,工作区(work folder)、暂存区(stage)、本地仓库(local repo),再加上远程的git仓库(remote repo)就可以分为四个区域。如下图[2]所示。
fork意为分叉,你可以在GitHub上fork别人的项目到自己的仓库,此时流程如下。
Git工作流程
Git工作流程如下:
- 在工作目录中添加修改文件;
- 将需要进行版本管理的文件放入暂存区域;
- 将暂存区域的文件提交到git仓库。
4、Git项目搭建
Git项目搭建一般有两种方式,一种是创建全新的仓库,另一种是克隆远程的仓库。
本地仓库搭建
本地仓库搭建步骤如下:
1、创建全新的仓库,需要用Git管理的项目的根目录执行:
|
|
2、执行代码后,项目目录中多了一个.git目录,关于版本等所有信息都在目录里面。
克隆远程仓库
1、创建工作目录。
2、根目录执行代码:
|
|
5、Git文件操作
文件有四种状态,如下图所示。
查看文件状态
文件四种状态可以通过下面命令进行查看。
|
|
忽略文件
如果不想让某些文件纳入版本控制中,比如数据库文件,临时文件,此时需要忽略文件。
在主目录下简历".gitignore"文件,此文件有如下规则:
- 忽略文件中的空行,以#开始的行会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符。
- 如果名称的最前面有一个感叹号(!),代表例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录的文件不忽略。
- 如果名称的最后面有一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件。
|
|
6、Git分支
类似平行宇宙,两个分支不干扰。如下图有Bugfix与feature两个分支。
|
|
master主分支应该非常稳定,用来发布新版本,一般不允许在上面工作,工作一般新建dev分支上工作,工作完后合并到主分支。
7、开发推荐流程
1.git clone // 到本地
2.git checkout -b xxx 切换至新分支xxx(相当于复制了remote的仓库到本地的xxx分支上)
3.修改或者添加本地代码(部署在硬盘的源文件上)
4.git diff 查看自己对代码做出的改变
5.git add 上传更新后的代码至暂存区
6.git commit 可以将暂存区里更新后的代码更新到本地git
7.git push origin xxx 将本地的xxxgit分支上传至github上的git
----------------------------------------------------------------------------------------------
(如果在写自己的代码过程中发现远端GitHub上代码出现改变)
1.git checkout main 切换回main分支
2.git pull origin master(main) 将远端修改过的代码再更新到本地
3.git checkout xxx 回到xxx分支
4.git rebase main 我在xxx分支上,先把main移过来,然后根据我的commit来修改成新的内容
(中途可能会出现,rebase conflict ---->手动选择保留哪段代码)
5.git push -f origin xxx 把rebase后并且更新过的代码再push到远端github上(-f --->强行)
6.原项目主人采用pull request 中的 squash and merge 合并所有不同的commit
----------------------------------------------------------------------------------------------
远端完成更新后
1.git branch -d xxx 删除本地的git分支
2.git pull origin master 再把远端的最新代码拉至本地