版本控制简介,Git笔记

Git

版本控制

版本迭代,新版本,版本管理器,多人开发必须使用版本控制

版本控制(Revision Control)是一种在开发过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便回复以前的版本的软件工程技术

  • 实现跨区域多人协同开发
  • 追踪和记载一个文件或多个文件的历史记录
  • 组长和保护源代码和文档
  • 统计工作量
  • 并行开发、提高开发效率
  • 跟踪记录整个软件的开发过程
  • 减轻开发人员的负担,节省时间,降低人为错误

常见版本控制器

  • Git(最流行)
  • SVN
  • CVS
  • VSS
  • TFS
  • Visual Studio Online

版本控制分类

本地版本控制(RCS)

记录每次更新,可以对每个版本做一个快照,或记录补丁文件,适合个人使用,如RCS

本地版本控制

集中版本控制(SVN)

版本数据保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改。

所有版本都存在服务器上,用户本地只要自己以前所同步的版本,如果不联网,用户看不到历史版本,也无法切换版本验证问题,或在不同分支工作。

所有数据保存在单一服务器上,由服务器损坏丢失数据的分线,需要定期备份。

集中版本控制

分布式版本控制(Git)

每个人都拥有全部的代码,可能具有一些安全隐患

所有版本信息仓库全同步到本地的每个用户,可以在本地查看所有版本历史,可以离线在本地提交,在联网时push到相应服务器或用户处。只有一个用户的设备安全就能可以恢复所有数据,不会因为服务器损坏或网络问题不能工作,但增加了本地存储空间的占用。

分布式版本控制

Git与SVN的主要区别

  • SVN:集中式版本控制系统。版本库放在中央服务器,工作时需要从中央服务器得到最新版本,使用后再推送到中央服务。联网才能工作,对网络带宽要求高
  • Git:分布式版本控制系统。没由中央服务器,工作时不需要联网,仅需要互相推送修改的内容就可使用

Git是目前最先进的分布式版本控制器

Git历史

Linux之父开发,免费,开源

Git环境配置

  • 镜像下载
  • 无脑安装

三个命令:

  • Git Bash: Unix和Linux风格的命令行,使用最多,推荐最多
  • Git CMD: Windows风格的命令行
  • Git GUI: 图形界面的Git,不建议初学者使用

Linux基本命令

  1. cd: 修改目录

  2. cd .. : 退回至上一个目录,直接cd进入默认目录(注意cd..中间有空格)

  3. pwd: 显示当前所在的目录路径

  4. ls, ll: 列出当前目录中的所有文件,ll列出的目录更为详细

  5. touch: 新建一个文件夹,如touch index.js,在当前目录下新建一个index.js文件

  6. rm: 删除一个文件,如rm index.js,删除index.js

  7. mkdir: 新建一个文件夹

  8. rm -r: 删除一个文件夹,rm -r src删除名为src的文件夹

    #切勿在linux中尝试,作用是删除电脑中的所有内容 rm -rf / 
  9. mv: 移动文件,mv index.html src,其最终index.html为目标文件,src为目标文件夹,文件和文件夹需在同一目录下

  10. reset: 重新初始化终端/清屏

  11. clear: 清屏

  12. history: 查看历史命令

  13. help: 帮助

  14. exit: 退出

  15. #: 表示注释

Git配置

所有配置文件都保存在本地

  1. git config -l: 查看当前项目下面的配置
  2. git config --system --list: 查看系统配置
  3. git config --global --list:查看当前用户(global)配置,下面有用户名和地址,必须配置

配置文件

  1. 安装目录\Git\etc\gitconfig: Git安装目录的下的gitconfig --system 系统级的配置
  2. C:\User\用户名\.gitconfig: 本机的配置内容

设置用户名与邮箱(用户标识)

这些信息会嵌入提交的内容中:

git config --global user.name name	#名称 git config --global user.email mail	#邮箱 

Git基本理论(核心)

工作区域

Git本地有三个工作区域和一个远程区域:

  • 工作区(Working Directory)
  • 暂存区(Stage/Index)
  • 资源库(Repository/Git Directory)
  • 远程git仓库(Remote Directory)

工作区关系

  • Workspace:工作区,平时存放项目代码的地方
  • Index/Stage: 暂存区,临时存放改动,只是一个文件,保存即提交到文件列表信息
  • Repository: 仓库区(本地仓库),安全存放数据的位置,有提交的所有版本数据,HEAD指向最新放入仓库的版本
  • Remote:远程仓库,托管代码的服务器

Git区域示意图

工作流程

Git的一般的工作流程为:

  1. 在工作目录中添加、修改文件
  2. 将需要进行版本管理的文件放入暂存区;git add .: 传入全部文件
  3. 将暂存区的文件提交到Git仓库;git commit
  4. 推到远程;git push

工作流程

Git项目搭建

创建工作目录与常用指令

日常使用需要记忆六个命令

常用命令

本地仓库搭建

  1. 创建全新代码库,在根目录执行
# 在当前目录新建一个Git代码库 git init 

执行后项目目录多出一个隐藏文件.git目录,具有相关版本信息

  1. 克隆远程仓库:将远程服务器上的仓库完全镜像一份至本地
# 克隆一个项目和它的所有代码历史(版本信息) git clone [url] 

Git文件操作

文件4种状态

  • Untracked: 未跟踪,文件没用加入到git库,不参与版本控制,通过git add变为Staged
  • Unmodify: 文件入库未修改,版本库种的文件快照内容与文件夹中一直,修改后变成Modifiedgit rm移出版本库,成为Untracked文件
  • Modified: 文件已修改,仅修改没进行其他操作,通过git add可进入暂存staged状态;使用git chechout丢弃修改,返回Unmodify状态,即从库中去除文件,覆盖当前修改
  • Staged: 暂存状态,执行git commit将修改同步到库种,此时苦衷的文件和本地文件一致,文件为Unmodify状态,执行git reset HEAD filename取消暂存,文件为Modified状态

查看文件状态

查看文件状态

# 查看指定文件状态 git status [filename]  # 查看所有文件状态 git status  # 添加所有文件到暂存区 git add .  # 提交暂存区中的内容到本地仓库 -m 提交信息 git commit -m 消息内容 

image

忽略文件

忽略一些文件,不进入版本控制种,如数据库文件,临时文件,设计文件等

在主目录下建立.gitignore文件,有以下规则:

  1. 忽略文件中的空行或#开始行
  2. 可以使用Linux通配符,如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1, string2, ...})代表可选字符等
  3. 如果名称最前有一个感叹号(!)表示例外规则,将不被忽略
  4. 如果名称最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略
  5. 如果名称最面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽视)
#注释 *.txt		# 忽略所有.txt结尾的文件,不上传该文件 !lib.txt	# lib.txt除外 /temp		# 仅忽略项目根目录下的TODO文件,不包括子目录 build/		# 忽略build/目录下的所有文件 doc/*.txt	# 忽略doc/notes.txt,但不包括doc/server/arch.txt 

IDEA使用

命令行,按钮。。

说明: Git分支

master: 主分支

dev: 开发用

v3: 版本

# 查看现有分支 git branch  # 查看现在指向分支 git branch -r  # 创建新分支,但仍停留在现有分支 git branch [branch-name]  # 合并指定分支到当前分支 git merge [branch]  # 删除分支 git branch -d [branch-name]  # 删除远程分支 git push origin --delete [branch-name] git branch -dr [remote/branch]  

多个分支并行执行,会导致代码不冲突,即同时存在多个版本

如果引起冲突,可以修改冲突文件重新提交,选择保留哪个代码

主分支需要保证非常稳定,一般不允许在上面工作,工作一般情况在新建的dev上工作,完成工作后合并