本篇文章是企业级接轨的文章,我们在公司的开发,并不是一个人独立完成的,需要
团队协作
,那么在企业中开发使用的很广泛的工具就是Git
,本文从Git的安装到Git在Idea中集成的操作详细的讲解,甚至连可能出现的异常都给安排上
课代表划重点:
1.Git架构
2.远程仓库的操作
3.对分支的理解(尤其是对应冲突解决
)
4.在idea中Git的相关操作
Git概述
概述
在软件开发过程,每天都会产生新的代码,代码合并的过程中可能会出现如下问题:
- 代码被覆盖或丢失
- 代码写的不理想希望还原之前的版本
- 希望知道与之前版本的差别
- 是谁修改了代码以及为什么修改
- 发版时希望分成不同的版本(测试版、发行版等)
因此,我们希望有一种机制,能够帮助我们:
- 可以随时回滚到之前的版本
- 协同开发时不会覆盖别人的代码
- 留下修改记录,以便随时查看
- 发版时可以方便的管理不同的版本
什么是版本控制系统
一个标准的版本控制系统 Version Control System (VCS),通常需要有以下功能:
- 能够创建 Repository (仓库),用来保存代码
- 协同开发时方便将代码分发给团队成员
- 记录每次修改代码的内容、时间、原因等信息
- 能够创建 Branch (分支),可以根据不同的场景进行开发
- 能够创建 Tag (标签),建立项目里程碑
版本控制系统的发展史
版本控制系统发展至今有几种不同的模式:
Local VCS
本地使用 复制/粘贴
的方式进行管理,缺点是无法协同开发
Centralized VCS (Lock,悲观锁)
中央集中式版本控制系统团队共用仓库,当某人需要编辑文件时,进行锁定,以免其他人同时编辑时造成冲突。缺点是虽然避免了冲突,但不是很方便。其他人需要排队才能编辑文件,如果有人编辑了很久或是忘记解锁就会造成其他人长时间等待的情况。
Centralized VCS (Merge,乐观锁)
中央集中式版本控制系统团队共用仓库,不采用悲观锁方式来避免冲突,而是事后发现如果别人也修改相同文件(冲突),再进行手动修改解决。有很多 VCS 属于这种类型,如:CVS,Subversion,Perforce 等
中央集中式版本控制系统的共同问题是,做任何操作都需要和服务器同步,如果服务器宕机则会造成无法继续工作的窘迫。
Distributed VCS
分布式版本控制系统,本地也拥有完整的代码仓库,就不会出现上述集中式管理的问题,即使没有网络,依然可以 commit
和看 log
,也无需担心服务器同步问题。如:Git,Mercurial,Bazaar 等就属于分布式版本控制系统。缺点是功能比较复杂,上手需要一定的学习时间。
介绍
- Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
- Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
- Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。
Git环境搭建
Git的安装
下载地址:https://git-scm.com/downloads
除了安装位置以外都直接Next,安装位置可以自定义
安装后我们需要做一些初始的设置
//如下信息会在提交代码时使用,让别人知道哪次提交是谁提交的修改
git config --global user.name"leiyujia" //你的用户名
git config --global user.email"1010866409@qq.com" //你的邮箱
//查看信息
git config -l
// 测试:在cmd中执行 ,查看git版本
git version
Git的架构
版本库:工作区中有一个隐藏目录
.git
,这个目录不属于工作区,而是git的版本库
,是git管理的所有内容暂存区;版本库中包含一个临时区域,保存下一步要提交的文件
分支:版本库中包含着分支,提交的文件存储在分支中
在计算机的文件系统Git的架构
仓库
对应的就是一个
目录
,这个目录中所有的文件被git管理起来以后会将一个
项目的根目录
,作为仓库仓库中的每个文件的改动都由git来跟踪
新建仓库
选择一个目录,执行指令:
git init
就会在目录下生成一个仓库
基本操作
查看仓库状态
我们先在仓库的工作区中仅仅是创建新文件abc.txx和def.txt.
执行
git status
可以看到工作区中文件的状态
- 这个指令在操作中可能会经常用到,我们可以用来查看我们哪个文件时未被跟踪的,哪些文件是未被提交的
暂存文件
仅仅是暂存,而不是真正的提交
执行
git add .
将工作区中的文件全部存入暂存区
提交文件
执行`git commit -m “add two files”
- -m:指的是-message(信息) 后面的双