版本控制简介,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基本命令
-
cd
: 修改目录 -
cd ..
: 退回至上一个目录,直接cd
进入默认目录(注意cd
和..
中间有空格) -
pwd
: 显示当前所在的目录路径 -
ls
,ll
: 列出当前目录中的所有文件,ll
列出的目录更为详细 -
touch
: 新建一个文件夹,如touch index.js
,在当前目录下新建一个index.js文件 -
rm
: 删除一个文件,如rm index.js
,删除index.js -
mkdir
: 新建一个文件夹 -
rm -r
: 删除一个文件夹,rm -r src
删除名为src的文件夹#切勿在linux中尝试,作用是删除电脑中的所有内容 rm -rf /
-
mv
: 移动文件,mv index.html src
,其最终index.html为目标文件,src为目标文件夹,文件和文件夹需在同一目录下 -
reset
: 重新初始化终端/清屏 -
clear
: 清屏 -
history
: 查看历史命令 -
help
: 帮助 -
exit
: 退出 -
#
: 表示注释
Git配置
所有配置文件都保存在本地
git config -l
: 查看当前项目下面的配置git config --system --list
: 查看系统配置git config --global --list
:查看当前用户(global)配置,下面有用户名和地址,必须配置
配置文件
安装目录\Git\etc\gitconfig
: Git安装目录的下的gitconfig --system 系统级的配置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 add .
: 传入全部文件 - 将暂存区的文件提交到Git仓库;
git commit
- 推到远程;
git push
Git项目搭建
创建工作目录与常用指令
日常使用需要记忆六个命令
本地仓库搭建
- 创建全新代码库,在根目录执行
# 在当前目录新建一个Git代码库 git init
执行后项目目录多出一个隐藏文件.git
目录,具有相关版本信息
- 克隆远程仓库:将远程服务器上的仓库完全镜像一份至本地
# 克隆一个项目和它的所有代码历史(版本信息) git clone [url]
Git文件操作
文件4种状态
- Untracked: 未跟踪,文件没用加入到git库,不参与版本控制,通过
git add
变为Staged
- Unmodify: 文件入库未修改,版本库种的文件快照内容与文件夹中一直,修改后变成
Modified
或git 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 消息内容
忽略文件
忽略一些文件,不进入版本控制种,如数据库文件,临时文件,设计文件等
在主目录下建立.gitignore
文件,有以下规则:
- 忽略文件中的空行或#开始行
- 可以使用Linux通配符,如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1, string2, ...})代表可选字符等
- 如果名称最前有一个感叹号(!)表示例外规则,将不被忽略
- 如果名称最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略
- 如果名称最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽视)
#注释 *.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上工作,完成工作后合并