版本控制系统理论知识
GIT:分布式版本控制系统
- 1.版本控制系统
开发中我们把每一次修改都有效的进行记录(记录成一个版本),后期如果需要回退到原有的有个版本或者是用当前的和某一个版本进行比较,都可以有效的进行管理。常用的版本控制系统:SVN(集中式)/ GIT(分布式)
- 2.分布式和集中式管理系统的特点
- 分布式
分布式就是把每个开发者的本地客户端都是一个完整的创库,都能记录历史版本信息,这样不需要联网,我们也能 生成历史记录,也可以快速回退到某个版本
- 集中式
所有的历史版本都是在中央服务器上建立的,本地客户端只是一个开发的环境,开发完需要推到服务器上生产历史 版本,需要回退到某个版本,也需要从中央服务器拉取,必须联上中央服务器才可以,‘必须联网’
- 传输速度对比
GIT是按照文件流来实现文件传输的,而SVN是按照文件传输的,所以GIT比SVN更快
- 分布式
Linux常用命令
GIT是Linux团队开发的
window操作系统: DOS窗口和DOS命令
linux服务操作系统:LINUX命令
ls -l/-a: 查看当前目录结构 (-a是可以看见所有的:包含隐藏的)
cd [路径地址]: 进入到执行的文件夹中 (进入的路径地址,可以粘贴到对应的操作地址)
cd /: 根目录
cd ./:当前目录
cd ../:上一个目录
clear: 清屏
mkdir: 创建文件夹
touch: 创建文件
cat:查看文件中的内容
vi:向文件中插入或者管理一些内容
i => 进入到插入模式
ESC + :WQ, 推出内容的插入模式, 把刚才的内容保持
echo:向指定的文件中输入内容
cp:拷贝
rm:删除文件 -r递归删除 -f 强制删除, 一旦删除无法还原
git 细节问题
- 第一次使用git提交代码到历史区需要配置一下信息
git config --global user.name '某某某' git config --global user.eamil '邮箱'
- 并不是所有的文件都需要提交(比如node_models)
.gitignore => GIT提交的忽略文件
##ignore this file## /target/ .classpath .project .settings ##filter databfile、sln file## *.mdb *.ldb *.sln ##class file## *.com *.class *.dll *.exe *.o *.so # compression file *.7z *.dmg *.gz *.iso *.jar *.rar *.tar *.zip *.via *.tmp *.err # OS generated files # .DS_Store .DS_Store? ._* .Spotlight-V100 .Trashes Icon? ehthumbs.db Thumbs.db
- 查看历史版本
git log
git使用的常规流程
- 理解GIT仓库的区
- 工作区: 写代码
- 暂存区:临时存放每一次修改的代码,但是没有生产历史版本
- 历史去:存放所有历史版本的地方(提交历史区就会生成历史版本)
// 创建GIT仓库
git init
// 把工作修改的代码内容提交到暂存区(可以指定具体文件 git add XXX.js)(可以提交多次文件到暂存区)
git add . 或者 -A
// 把暂存区的代码提交到历史区生成一个历史版本
git commit -m '备注'
// 查看当前修改的文件处于哪个区域
// 红色:工作区
// 绿色:暂存区
// 看不见:已经提交到历史区
git status
每一次区域间的提交都不会删除原有区域的内容,这样保证,下一次提交,只是把区域对比出来的内容提交,而不是所有
暂存区
// 从暂存区撤回
git rm --cached XX.js
// 把暂存区的某一个文件删除(提交到暂存区的内容不好,我们可以删除)
git rm --cached xxx.xx
git rm --cathed . -r 删除暂存区中所有的提交
// 提交到暂存区一份,工作区内容改了,但是改的东西不好,想把上次提交的内容撤回到工作区(覆盖工作区新写的内容)
git checkout xxx.xxx
(暂存区的内容没有消失,只是把工作区最新修改的信息给覆盖掉,让工作区和暂存区保持一致)
历史版本回滚
git log //版本号历史
// 在历史区中回退到某一个版本(强制把暂存区和工作区变成回退后的版本)
git reset --hard 版本号
团队协作GIT操作
基础流程
-
1.首先创建中央仓库:
github/codding
-
2.创建客户端本地仓库(一个开发者就是一个单独仓库),还需要让本地的仓库保持关联,样才可以实现后续的信息同步
把开发者都列入仓库开发群组中,这样每一个开发者都用自己的github账号,都有权限操纵这个仓库(也可以同时用一个账号,但是不知道是谁提交的)
git init 创建本地仓库
git remote add origin ‘远程仓库地址’
git remote -v => 查看连接信息
git remote rm origin => 移除本地仓库和远程仓库连接
git remote updata origin ‘地址’ => 更新链接通道
更简单的方法:直接把远程仓库克隆到本地,就相当于创建本地仓库,而且自动建立了链接,并且把远程创库的内容也同步到了本地
git remote origin set-url 远程地址 // 最简单的方法 -
各自和中央服器同步代码
推送: git push origin master (每一次PUSH之前最好都pull一下:如果有冲突先解决冲突)
拉取: git pull origin master
无分支管理模式
-
冲突合并
有冲突根据冲突类型去解决冲突
1.进入到编辑框模式,i(编辑) => ESC(退出编辑) => :wq(保持并关闭) 即可
2.git自己会把两份代码都保存在本地文件中,自己手动去选择要哪一个,改完后重新提交即可
单独分支管理模式
分支指的是历史的分支,创建分支就是创建不同的线路,来管理历史版本
-
创建分支并切换到分支下
git branch 查看当前存在的分支
git branch 分支名 创建一个分支 (创建完分支,会把本地的master分支中的内容同步到dev分支上)
git checkout ‘分支名’ 切换分支
git checkout -b dev 创建并且切换到这个分支
git stash (分支有更改不能直接切换分支,需要先暂存分支信息)
-
分支合并
1、进入要合并的分支(如开发分支合并到master,则进入master目录)
git checkout master2、查看所有分支是否都pull下来了
git branch -a3、使用merge合并开发分支
git merge 分支名4、查看合并之后的状态
git status5、 删除分支
git branch –d ‘分支名称’ -
合并某单一文件
git checkout 需要合并到的分支
git checkout 合并文件的分支 文件路径
-