协同开发—Git
1、版本控制
版本迭代——多次更新覆盖且兼容前面的内容,已达到最新标准或要求的版本更替
- 版本控制最主要的功能就是追踪文件的变更。
- 实现跨区域实现多人协同开发
- 追踪、记载一个或多个文件的历史记录
- 组织、保护自主编写的源码及文档
- 统计工作量
- 并发性开发,提高效率
- 实时追踪项目开发进程
- 减轻开发人员的压力,节省时间降低错误
简单的说,Git就是用于多人协同开发同一项或多项工程项目的技术
1.1、版本控制的分类
本地版本控制
记录文件的每次更新,对每个版本的更新做一个快照,记录补丁文件,适用于个人,如RCS。集中版本控制
所有版本数据保存在服务器上,协同来发时从服务器上来取下来更新修改再次上传,上传内容不能重复,如SVN分布式版本控制
所有版本的信息仓库全部同步到本地的每个用户账号上且 版本相同,防止服务器宕机带来的损失,大幅度提升了效率,如Git
2、Git安装及使用
使用镜像下载,一切都来得太快
下载完成后无脑next
安装完成后打开控制器或鼠标右击都可以找到Git
Git Bash: Unix与Linux风格的命令行
Git CMD: windows风格的命令行
Git GUI:图形界面的Git
打开窗口
右键点击
滚轮向下进入界面
3、基本Lniux命令
3.1、基本命令
- cd /home 进入 ‘/ home’ 目录’
- cd .. 返回上一级目录
- cd ../.. 返回上两级目录
- cd 进入个人的主目录
- cd ~user1 进入个人的主目录
- cd - 返回上次所在的目录
- clear 清屏
- exit 退出
#
注释pwd 显示工作路径
- reset 重新初始化终端/清屏
- ls 查看目录中的文件
- ls -F 查看目录中的文件
- ls -l 显示文件和目录的详细资料
- ls-ll 显示当前目录下所有的文件,更详细
- ls -a 显示隐藏文件 ls [0-9] 显示包含数字的文件名和目录名
- tree 显示文件和目录由根目录开始的树形结构
- touch 新建一个文件 如touch index.js 就会在当前目录下新建一个index.js文件
- lstree 显示文件和目录由根目录开始的树形结构
- mkdir dir1 创建一个叫做 ‘dir1’ 的目录’
- mkdir dir1 dir2 同时创建两个目录
- mkdir -p /tmp/dir1/dir2 创建一个目录树
- rm -f file1 删除一个叫做 ‘file1’ 的文件’
- rmdir dir1 删除一个叫做 ‘dir1’ 的目录’
- rm -rf dir1 删除一个叫做 ‘dir1’ 的目录并同时删除其内容
- rm -rf dir1 dir2 同时删除两个目录及它们的内容
- mv dir1 new_dir 重命名/移动 一个目录
- cp file1 file2 复制一个文件
- cp dir/* . 复制一个目录下的所有文件到当前工作目录
- cp -a /tmp/dir1 . 复制一个目录到当前工作目录
- cp -a dir1 dir2 复制一个目录
- cp -r dir1 dir2 复制一个目录及子目录
- ln -s file1 lnk1 创建一个指向文件或目录的软链接
- ln file1 lnk1 创建一个指向文件或目录的物理链接
- touch -t 0712250000 file1 修改一个文件或目录的时间戳 - (YYMMDDhhmm)
- file file1 outputs the mime type of the file as text
- iconv -l 列出已知的编码
3.2、配置命令
所有配置文件都保存在本地
- 查看所有配置
- 查看所有配置
Git\etc\gitconfig :Git安装目录下的config
- —system系统级
—global全局
- 设置用户名和邮箱
git config --global user.name "hg" #名字
git config --global user.email 936711466@qq.com #邮箱
4、Git基本原理(重点)
1、工作分区:
Git本地有三个工作区域:
工作目录(Working Directory)
暂存区(Stage/Index)
资源库(Repository或Git Directory)
如果在加上远程的git仓库(Remote Directory)就可以分为四个工作区域。文件在这四个区域之间的转换关系如下:
上传逻辑顺序
Working Directoy—>[^git add files]—>Stage—>^git commit—>History—>[^git push]—>Remote DirectoryGit上传原理
[^git add files]:将本地目录Working Directoy添加到暂存区Stage
- [^git push]:将本地仓库History的内容上传到远程仓库Remote Directory
拉取逻辑顺序
Remote Directory—>[^git pull]—>History—>^git reset—>Stage—>[^git checkout]—>Working DirectoyGit拉取原理
[^git pull]:将远程仓库Remote Directory里的内容拉取到本地仓库History里
- [^git checkout]:将暂存区Stage里的内容拉取到本地目录Working Directoy
Directoy:使用Git管理的一个目录,即一个仓库,包含工作空间和管理空间
WorkSpace:通过Git进行版本控制的目录或文件,这些文件组成工作空间
git:存放Git管理的目录
index/Stage:暂存区,提供更新的区域
Local Repe:本地仓库,存放下拉资源的空间
Stash:隐藏的工作状态保存栈,用于保存/恢复WorkSpace的临时状态
Workspace:工作区,就是平时存放项目代码的地方
Index / Stage:暂存区,用于临时存放的改动,事实上它只是一个文件,保存即将提交到文件列表信息
Repository:仓库区(或本地仓库),就是安全存放数据的位置,这里面有你提交到所有版本的数据。其中HEAD指向最新放入仓库的版本
Remote:远程仓库,托管代码的服务器,可以简单的认为是项目组中的一台电脑用于远程数据交换
本地的三个区域确切的说应该是git仓库中HEAD指向的版本:
5、Git的工作流程
git的工作流程一般是这样的:
1、在工作目录中添加、修改文件;
2、将需要进行版本管理的文件放入暂存区域;
3、将暂存区域的文件提交到git仓库。
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)![](https://gitee.com/hg14150/blogiamges/raw/master/img/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X3BuZy91SkRBVUtyR0M3S3N1OFVsSVR3TWxiWDNrTUd0WjlwMDlpYU9obDBkQUNmTHJNd05iRHp1Y0dRMzBzM0huc2lhY3pmY1I2ZEM5T2VoaWN1d2liS3VIalJsemcvNjQw#alt=img)
5.1、搭建项目
工作目录(WorkSpace)就是希望Git帮助管理的文件夹,可以是项目的目录,也可以是一个空目录,建议不要有中文。
日常使用只要记住下图6个命令:
1、创建本地仓库
一种是创建全新的仓库
创建一个空白文件夹,在新的文件夹目录上打开Git Bash Here 输入命令行git init
另一种是克隆远程仓库
打开远程仓库找到资源,在复制克隆地址,在新的文件夹目录上打开Git Bash Here 输入命令行git clone
2、Git文件操作
版本控制就是对文件的版本控制,要对文件进行修改、提交等操作,首先要知道文件当前在什么状态,不然可能会提交了现在还不想提交的文件,或者要提交的文件没提交上。
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过
git add
状态变为Staged
. - Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为
Modified
. 如果使用git rm
移出版本库, 则成为Untracked
文件 - Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过
git add
可进入暂存Staged
状态, 使用git checkout
则丢弃修改过, 返回到unmodify
状态, 这个git checkout
即从库中取出文件, 覆盖当前修改 ! - Staged: 暂存状态. 执行
git commit
则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename
取消暂存, 文件状态为Modified
3、文件状态
上面始终操作对应四种状态
#查看指定文件或目录
git status [filename]
#查看所有文件或目录
git status
#添加文件到暂存区
git add .
#将暂存区中的内容提交到本地仓库 -m提交信息 一定要全名一个符号都不能少
git commit -m "new file 文件名"
5.2、可忽略文件
- 前端项目,npm_moudles是不用上传的
- 数据库文件、临时文件、设计文件等也是不用上传的
在IDEA项目主目录下创建
.gitgnore
文件,规则如下
- 忽略文件中的空行或以
#
开始的行 *
可忽略任意多个字符,?
可忽略指定的一个字符[]
代表可选字段范围{}
代表可选字符串- 以
!
开头则不会被忽略 - 以
/
开头,则忽略的内容是此文件一下的内容,而子目录中的文件不被忽略 - 以
/
结尾,则忽略此目录下改名称的子目录,而非文件
#为注释
*.txt #忽略所有以.txt结尾的文件,这样上传不会被选中
!lib.txt #忽略除lib.txt的文件
/src #忽略主项目一下的文件,但不包括sec
build/ #忽略build/目录下的所有文件
doc/*.txt #忽略doc下一级的所有.txt文件
6、GitEE的使用
全球使用最广泛的同性交友网站——GitHub,在国内使用速度慢,需要翻墙
国内使用最广泛的同性交友网站——GitEE,也称为码云
6.1、创建远程仓库
GitEE创建
- 命令行创建仓库