1、版本控制
-
概念
-
用于管理多人协同开发的技术
-
版本控制是在我们开发的过程中用于管理我们的文件、目录或工程等内容的修改历史,方便查看历史更改记录,备份以便恢复以前的版本的软件工程技术。
-
-
优点
-
实现跨区域多人协同开发
-
追踪和记载一个或者多个文件的历史记录
-
组织和保护源代码和文档
-
统计工作量
-
并行开发,提高开发效率
-
跟踪记录整个软件的开发过程
-
减轻开发人员的负担,节省时间,同时降低人为错误
-
-
常见的版本控制工具
-
Git
-
SVN(Subversion):版本控制
-
CVS(Concurrent Versions System):并发版本系统
-
VSS(Microsoft Visual Sourcesafe)
-
TFS(Team Foundation Server):团队基本服务器
-
Visual Studio Online
-
-
版本控制分类
-
本地版本控制
-
记录文件每次的更新,可以对每个版本做一个快照或是记录补丁文件,适合个人用,如RCS
-
缺点:
不能实现团队合作
-
-
集中版本控制:SVN
-
所有的版本控制都保存在服务器上,协同开发者从容器上同步更新或上传自己的修改
-
缺点:
-
所有的版本数据都在服务器上,用户的本地只有自己以前所同步的版本,如果不联网的话,用户看不到历史版本,也无法更新最新版本或在不同分支合作
-
所有的数据都保存在单一服务器上,有很大的数据丢失的风险
-
-
-
分布式版本控制:Git
-
所有的版本信息仓库全部同步到用户本地上,这样就可以在本地查看所有的历史版本,可以离线在本地提交,只需在联网时push到相应的服务器或其他用户那里
-
只要有一个用户的数据没有问题就可以恢复所有的数据
-
缺点:
增加了本地存储空间的占用
-
-
-
Git和SVN区别
-
SVN
-
集中式版本控制系统
-
版本库集中放在中央服务器
-
联网才能工作
-
协同工作时,首先从中央服务器上获得最新的版本,完成工作后,把最新的版本推送到中央服务器,对方从服务器上下载新版本,才能看到修改
-
-
Git
-
分布式版本控制系统
-
没有中央服务器,每个人的电脑就是版本库
-
不需联网
-
协同工作时,若修改了文件,只需把新版本推送给对方,对方就可以看到修改,无需推送到服务器
-
-
2、Git的历史
-
Linux 和 Git之父:李纳斯·托沃兹
-
李纳斯·托沃兹 创造了Linux系统后,在1991 - 2002 年期间,整个Linux内核维护工作都花在了提交补丁和保存归档这些繁琐的事情上。
-
2002年,整个项目组开始启用一个专门的分布式版本控制系统,BitKeeper来管理和维护代码
-
2005年,Linux内核开源社区和BitKeeper的公司合作关系结束后,李纳斯·托沃兹用了两周的时间开发出了自己的版本系统,也就是Git
3、Git的安装及配置
-
下载
-
Git官网
-
淘宝镜像:
-
-
卸载:(以前安装过可卸载)
-
控制面板,卸载
-
清除环境变量
-
-
安装
-
无脑 next 即可
-
注意两点:
-
安装地址,尽量不要安装到C盘
-
有个文档编辑器,可选择自己电脑上安装的编辑器,也可以默认不做修改
-
-
安装成功后
-
在开始菜单中会有Git项
-
在任意文件夹下点击鼠标右键,也可以看到Git的程序
-
-
Git Bash:Unix与Linux风格的命令行,使用最多
-
Git CMD:Windows风格的命令行
-
Git GUI:图形界面的git
-
-
环境配置
-
环境变量的配置是为了全局使用
-
安装Git成功后默认系统会自动在环境变量中配置
-
4、常用的Linux命令
-
cd :改变目录
-
cd... :回退到上一个目录
-
pwd :显示当前所在的目录路径
-
ls :列出当前目录中的所有文件
-
touch :新建一个文件
-
rm :删除一个文件
-
mkdir :新建一个文件夹
-
rm -r :删除一个文件夹
-
mv :移动文件,mv index.html test,把index.html移动到test文件夹下
-
reset :重新初始化终端/清屏
-
clear :清屏
-
history :查看命令历史
-
exit :退出
-
#表示注释
5、Git配置
-
git config -l :查看git的全部配置
-
git config --system --list :查看系统的配置
系统配置的文件在:安装Git的目录下的 Gitetcgitconfig里
-
git config --global --list :查看用户自己的配置
用户自定义的配置的文件在:C:Users用户名下的 .gitconfig 文件里
-
设置自己的用户名和邮箱(必须要做)
-
git config --global user.name "用户名"
-
git config --global user.email 邮箱
-
6、Git工作区域
-
Git 的工作区域
-
工作目录:(Working Directory)
-
项目在电脑上存放的目录
-
-
暂存区:(Stage/index)
-
用于临时存放项目的改动
-
只是一个文件,保存即将提交的文件列表信息
-
-
资源库(本地仓库):(Repository或Git Directory)
-
安全存放数据的位置,里面有提交的所有版本的数据
-
HEAD指向最新放入仓库的版本
-
-
远程的Git 仓库:(Remote Directory)
-
托管代码的服务器
-
-
-
工作区域图如下:
-
Git 的工作流程
-
1、在工作目录中添加、修改文件
-
2、将需要进行版本管理的文件添加到暂存区
-
3、将暂存区域的文件提交到git仓库
-
7、Git项目搭建
-
本地仓库搭建
-
创建全新的仓库
在需要用Git 管理的项目的根目录中执行以下语句:git init
执行后文件夹中多出了一个 .git 文件夹,关于版本的所有信息都在这个文件夹里
-
-
克隆远程仓库
-
将远程仓库中的镜像完全复制一份到本地
-
在Gitee或者GitHub上复制这个项目的url
-
输入以下命令并运行,即可
git clone url
-
8、Git文件操作
-
文件的4种状态
-
Untracked:未跟踪
-
此文件在文件夹中,但是没有被git管理
-
通过 git add files 命令变成 Staged状态
-
-
UnModify:文件已经入库,未修改
-
版本库中的文件快照内容与文件夹内容完全一致
-
若此时文件被修改,状态变为 Modify
-
如果使用 git rm 命令移除版本库,状态变成Untracked
-
-
Modify:文件已修改
-
通过 git add files 可以变成Staged状态
-
通过 git checkout 可丢弃修改,退回到UnModify状态
-
-
Staged:暂存状态
-
执行 git commit 将修改同步到库中,此时库中的文件和本地的文件又变为一致,转变成 UnModify 状态
-
执行 git reset HEAD filename 取消暂存,文件变成Modify状态
-
-
-
查看指定文件状态:git status filename
-
查看所有文件状态:git status
-
把文件添加到暂存区中:git add .
-
把文件提交到本地仓库中:git commit -m "注释信息"
-
忽略文件:
-
有时候不想把某些文件纳入到版本控制中,比如数据库文件、临时文件、设计文件等等,在主目录下建立 “.gitignore” 文件,此文件的规则如下:
-
1、文件中的空行将被忽略
-
2、以#开头的内容将被忽略
-
3、可以使用Linux通配符:
-
*代表任意多个字符
-
? 代表一个字符
-
[]代表可选字符的范围
-
{}代表可选的字符串范围
-
-
4、! 后面跟的内容将不会被忽略
-
5、/ + 文件名,要忽略的文件在此目录下,而子目录中的文件不会被忽略
-
6、文件名 + /,要忽略的是此目录下该名称的子目录
//忽略所有以 .txt结尾的文件
*.txt
//lib.txt不被忽略
!lib.txt
//忽略和build在同一级目录下的其他文件
/build
//忽略build目录下的所有文件
build/
-
-
9、码云的使用
-
三种码云:
GitHub、Gitee、公司自己搭建的Github
-
Github 和 Gitee的注册和使用
-
1、注册账号,完善个人信息
-
2、设置本机绑定SSH公钥,实现免密码登录
-
不设置免密码登录的话,每次提交到远程仓库都需要密码
-
使用命令行生成公钥
-
Github:ssh-keygen -t rsa -C "邮箱地址",一路回车到生成密钥
-
Gitee:ssh-keygen -t rsa,一路回车到生成密钥
-
生成的文件在:C:Users用户名.ssh中,有两个文件
-
id_rsa
-
id_rsa.pub
-
-
把公钥配置在码云中
打开.ssh文件中的id_rsa.pub,把文件中的内容复制到Github或者Gitee里的
个人信息设置 ---> 公钥设置 ---> SSH公钥设置中
-
-
-
3、创建远程仓库
-
10、关于Git分支说明
-
Git分支中常用指令
-
列出所有本地分支:git branch
-
列出所有远程分支:git branch -r
-
新建一个分支,但依然停留在当前分支:git branch branchName
-
新建一个分支,并切换到该分支:git checkout -b branchName
-
合并分支到当前分支:$ git merge branchName
-
删除分支:$ git branch -d branchName
-
删除远程分支:
$ git push origin --delete branchName
$ git branch -dr branch/remote
-