文章目录
前言
当我们在编写大型项目时,经常会遇到以下这些苦逼问题:
1、不小心删除了自己的项目文档和源代码文件
2、不敢修改自己的源代码文件
3、不知道如何把自己项目文档传递给他人
4、不知道如何把自己的项目分发
5、不断的拷贝和备份
6、文档和源代码管理混乱,无法查找
这些问题是由于大型项目代码量大、需要团队合作、需要频繁迭代造成的,所以我们有必要学习一门技术来解决这些问题。
一、版本控制系统介绍
1、版本控制系统的概念
版本控制系统
版本控制系统,它是一种软件工程借以在开发的过程中,确保由不同人所编辑的同一档案都得到更新,它通过文档控制记录程序各个模块的改动,并为每次改动编上序号,并且编辑错误之后还可以回溯到以前的版本。
注意点
版本控制≠版本控制系统。版本控制系统是实现版本控制的工具,而版本控制它是一种软件工程借以在开发的过程中,确保由不同人所编辑的同一档案都得到更新,它通过文档控制记录程序各个模块的改动,并为每次改动编上序号,并且编辑错误之后还可以回溯到以前的版本。
2、版本控制系统功能
1、记录文件的所有历史变化
2、随时恢复到任何一个历史状态
3、多人协作开发或修改
4、错误恢复
5、多功能并行开发(分支)
3、版本控制系统分类
1、本地版本控制系统(VCS):本地版本控制系统是通过使用简单的数据库保存文件的所有变更。
2、集中式版本控制系统(VSS、VCS、SVN):有一个包含文件所有修订版本的单一服务器(中央服务器),多个客户端可以从这个中心位置检测出文件。集中式版本控制系统可以很好的解决多人协作间的问题,但是不能解决本地文档管理所存在的问题。
3、分布式版本控制系统(Git):每一次检出操作都对数据进行一次完整备份,任何客户端都可以利用自己的本地镜像来恢复服务器。分布式相比于集中式的最大区别在于开发者可以提交到本地,每个开发者通过克隆,在本地机器上拷贝一个完整的Git仓库。更加详细的介绍可查看博文集中式和分布式版本控制系统的区别
二、Git 与GitHub 简介
1、Git
1、Git起源
Git 由Linux 创始人Linus Torvalds开发,作为Linux 内核代码管理系统使用。Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
2、Git的特点(从开发者角度考虑)
1、从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上
2、在自己的机器上根据不同的开发目的,创建分支,修改代码
3、在单机上自己创建的分支上提交代码
4、在单机上合并分支
5、把服务器上最新版的代码fetch下来,然后跟自己的主分支合并
6、查看邮件或者通过其它方式查看提交状态
7、解决冲突
3、Git的优点
1、适合分布式开发,强调个体
2、速度快
3、简单的设计
4、对非线性开发模式的强力支持
5、有能力高效管理类似Linux内核一样的超大规模项目
6、离线工作
4、Git的缺点
1、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息
2、资料少(中文资料很少)
3、学习周期相对而言比较长
4、不符合常规思维
5、Git工作原理
详细过程可查看博文Git的思想和基本工作原理
2、GitHub
1、GitHub简介
GitHub是面向开源及私有软件项目的托管平台(官网https://github.com/),GitHub 于2008 年4 月10 日正式上线
2、GitHub功能
1、Git 代码仓库托管及基本的Web 管理界面。
2、订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等。
3、托管项目:Ruby on Rails、jQuery、python 等。
三、Git账户注册与管理
1、Git账户的注册
Git账户的注册(https://github.com/)
注册步骤一
注册步骤二
注册步骤三
注册成功
查看向导页面(GitHub基本操作)
What is GitHub?
Step 1. Create a Repository
Step 2. Create a Branch
Step 3. Make and commit changes
Step 4. Open a Pull Request
Step 5. Merge your Pull Request
2、账户管理
GitHub默认头像
1、Github给无头像用户生成5x5像素的Identicons头像。
2、使用用户ID的哈希值,然后根据哈希值每一位的奇偶值来决定对应位置上的像素的开关。这样生成的图像,配上由哈希值决定的颜色,保证可生成大量唯一的图像。
GitHub自定义账户头像
3、使用Gravatar关联头像与邮箱
1、Gravatar简介
Globally Recognized Avatar(全球识别头像)
官网:http://www.gravatar.com
功能:提供的在线头像服务,主要用在博客和论坛留言中,依靠邮件地址识别判断,为每个用户展示个性化的通用头像服务,完全免费。
2、注册Gravatar账户
注册Gravatar账户(http://www.gravatar.com)
邮件确认
登录账户
从邮箱登录
从网站登录
关联头像
头像更换成功
四、工作区、本地仓库、远程仓库
1、Git管理中文件的三种状态
对于任何一个文件,在Git内部都只有三种状态:已修改,已暂存和已提交。
已修改:表示修改了某个文件,但还没有提交保存
已暂存:表示把已修改的文件放在下次提交时要保存的清单中了
已提交:表示该文件已被安全的保存在本地数据库中了
2、Git管理中文件流转的三个工作区域
Git在管理项目时,文件流转的三个工作区域是:本地仓库(即工作目录,也就是项目的源文件)->暂存区域->Git的工作目录。
1、在本地的工作目录修改某些文件;
2、对修改后的文件进行快照,保存到暂存区域;
3、提交更新,将保存在暂存区域中的文件快照永久转存到Git的工作目录中
3、文件流转过程
4、开发者团队协作图
这种协作模式中可能会出现冲突,比如两名开发者同时从服务器上拿取文件,第一名开发者对文件进行更改,然后提交。第二名开发者也对文件进行修改,然后提交。这样一来第一位开发者对文件的更改将会丢失。对于预防这种冲突的方法是先在提交之前把服务器上最新的内容拿下来,然后再把自己更改的内容提交到服务器。以以上的例子来说,当第二位开发者要提交文件时,应该先将服务器上的最新版本与要提交的项目做一个同步,也就是说把开发者1所做的修改同步到开发者2所载的项目上,然后再进行提交。
五、创建版本库
1、Git和小乌龟工具安装(Windows)
下载地址
Git下载地址:https://git-for-windows.github.io/
小乌龟工具下载地址:https://tortoisegit.org/download/
安装完成后的效果
2、Git操作
1、小乌龟工具(TortoiseGit)使用
在GitHub上创建仓库
仓库创建完成
仓库克隆
在本地新建一个文件夹来存放克隆的仓库,这里取名为Repository。然后进入这个文件夹,右击选择Git Clone
克隆成功
本地仓库
点击进入这个仓库,可以看到一个.git文件夹,这个文件夹包含了这个仓库的信息,有这个文件夹就是一个仓库,如果没有这个.git的文件夹,那么剩下的文件就是工作区。
在本地建立本地仓库并与远程仓库关联
先建立一个空的文件夹,然后点击进入,右击选择
执行成功后产生了一个空仓库
在仓库的空白区域右击,选择TortoiseGit->Fetch
将远程仓库更新的内容同步到本地仓库
在仓库的空白区域右击,选择TortoiseGit->Pull
将文件添加到暂存区
在仓库内新建一个文件,然后选中这个文件右击,选择TortoiseGit->Add,这样就可以将文件添加到暂存区。
将暂存区的内容提交到本地仓库
提交成功
点击Push可以直接提交到远程仓库。
将文件添加到本地仓库
在仓库的空白区域右击,选择Git Commit->“main”,可以直接将新建的文件添加到本地仓库,也可以将暂存区中的文件添加到本地仓库。
点击Push可以直接提交到远程仓库。
将本地仓库提交到远程仓库
在仓库的空白区域右击,选择TortoiseGit->Push,可以直接本地仓库的内容提交到远程仓库。
提交成功
我们可以在GitHub上面看到提交成功的文件
为仓库添加合作者
此处的连接为:https://github.com/luotingyang/MyRepository/invitations,当合作者点击进入这个连接那么合作者就拥有了这个仓库。
创建分支
删除分支
选择默认远程仓库的分支
给当前仓库重命名
删除仓库
点击Options里面的
2、Git命令行使用
右击,选择Git Bash Here,打开命令行。
命令行成功打开后就可以开始输入Git命令
(1)、Git常用命令
设置用户名
git config --global user.name “用户名”
设置用户邮箱
git config --global user.email “用户邮箱”
查看设置
git config --list
(2)、Git本地操作
1)、初始化一个新的Git仓库
1、创建一个文件夹(或使用已有的文件夹)
mkdir demo
2、进入刚创建的文件夹内初始化Git,创建Git仓库
cd demo
git init
2)、Git修改操作
1、在本地工作区修改或新增文件/目录
2、空白处右键–>GitBash Here
3、添加新增加/修改的所有内容
git add *
4、提交到本地仓库
git commit -m “传输文件的描述”
5、提交到远程仓库
git push
七、冲突管理
1、冲突产生
1、本质
merge 和patch时产生冲突
2、冲突的类型
1、逻辑冲突
2、内容冲突
3、树冲突
2、冲突的解决
1、发现冲突
一般来讲,出现冲突时都会有“CONFLICT”字样
2、冲突解决的一般过程
merge/patch的冲突解决
先编辑冲突,然后gitcommit提交
rebase的冲突解决
rebase的冲突解决过程,就是解决每个应用补丁冲突的过程
3、编辑冲突的方法
直接编辑冲突文件
利用图形界面工具解决冲突
总结
在编写项目的过程中,为了系统管理代码,提高编写效率,减少出错的可能,版本控制系统非常有必要,作为分布式版本控制系统的代表Git更是值得我们学习。希望这篇文章可以为在学习版本控制技术的各位朋友提供一些帮助。
附录
视频学习资料:Git与Github入门(分布式版本控制系统应用基础)