一、简介
- Git是一个免费开源的分布式版本控制系统
- SVN是一个集中式版本控制系统
- 版本控制系统的核心是版本控制,而不是团队协作
- 版本控制系统提交记录后会产生迭代版本,方便检索对比和回滚
- SVN只有服务器版本控制,Git还有本地版本控制
版本控制系统集中式和分布式的区别
- 你的本地是否有完整的版本库历史
- 假设SVN服务器没了,那你丢掉了所有历史信息,因为你的本地只有当前版本以及部分历史信息
- 假设Git服务器没了,你不会丢掉任何git历史信息,因为你的本地有完整的版本库信息。你可以把本地的git库重新上传到另外的git服务商。
二、基本概念
- 工作区:本地存放项目代码的目录
- 暂存区:用于临时存放项目改动的文件,位于 .git/index 文件
- 本地仓库:各种修改的版本信息最后存储的地方,位于 .git 目录
- 远程仓库:托管代码的服务器
- git add:工作区 -> 暂存区
- git commit:暂存区 -> 本地仓库
- git push:本地仓库 -> 远程仓库
- git reset --soft:暂存区 -> 工作区
- git reset --mixed:本地仓库 -> 暂存区
- git reset --hard:本地仓库 -> 暂存区 -> 工作区
三、使用规范
3.1 分支管理策略
├─── 主分支(master)
│ ├─── 开发分支(develop)
│ │ ├─── 开发者A分支(develop-x1)
│ │ ├─── 开发者B分支(develop-x2)
│ │ ├─── 发布分支(release-x.y)
│ │ ├─── 发布分支(release-x.y)
│ ├─── 紧急修复分支(hotfix-aaa)
│ ├─── 紧急修复分支(hotfix-bbb)
│ ├─── (hotfix最后要合并到主分支和开发分支)
│
* master(主分支):可用的稳定版本,不允许随意提交修改,由开发经理从 develop 分支合并;
* develop(开发分支):不允许直接修改,但允许程序员发起提交合并请求;
* release(发布分支):在 develop 分支上创建的分支,用于测试发布部署;
* hotfix-xxx(紧急修复分支):在 master 分支上创建的分支,修复后合并到 master;
3.2 团队协作规范流程
<TODO>
---------------- 初始阶段 ----------------
1. 开发主管创建 master 分支,并将其设置为保护分支;
2. 开发主管在 master 分支上创建 develop 分支;
---------------- 开发阶段 ----------------
3. 并行项目(多人协作):在 develop 分支上创建 feature-xx 分支进行开发;
非并行项目(单人开发):在 develop 分支上创建 develop-yy 分支进行开发;
4. 开发完成后将 feature-xx 或 develop-yy 合并到 develop 分支;
(开发完成后可以删除 feature-xx 或 develop-yy 分支)
---------------- 测试阶段 ----------------
5. 开发人员在 develop 分支上创建 release-x.y 分支并解决 BUG 修复;
6. 测试完成后将 release-x.y 分支合并到 develop 分支;
7. 开发主管将 develop 分支合并到 master 分支;
(测试完成后可以删除 release-x.y 分支)
---------------- 紧急修复 ----------------
8. 在 master 分支上创建 hotfix-x.y 分支并解决 BUG 修复;
9. 将 hotfix-x.y 分支合并到 master 分支;
注意:feature-xx、develop-yy、release-x.y、hotfix-x.y 等分支仅作为本地分支。
3.3 团队协作操作步骤
#
#
$ git checkout -b dev-tracine origin/dev-tracine
#
$ git checkout -t origin/feature
#
#
$ git checkout develop-tracine
$ git pull origin develop
$ git merge --no-ff -m "merge" develop
#
$ git add -A
$ git commit -m "develop-tracine description"
$ git checkout develop
$ git merge --no-ff -m "说明" develop-tracine
$ git push origin develop
#
#
$ git merge --no-ff -m "修复后的1.1.3版本" hotfix-1.1.3
$ git tag -a v1.1.3 -m 'v1.1.3'
$ git push origin v1.1.3
3.4. 冲突解决方案
#
#
$ git stash save -m "备注"
#
$ git reset --hard HEAD
#
$ git pull
#
$ git stash pop
#
#
$ git reset --hard HEAD
$ git pull
3.5. 代码提交信息规范
$ <type>(<scope>): <subject>
#
#
#
#
#
#
#
#
#
#
#
#
$ fix: 用户查询缺少username属性
$ feat: 用户查询接口开发
$ style: 用户查询功能注释增强
$ chore: hutool 版本升级到 5.7.22
#
3.5. 多源仓库
#
# 1.在自己的项目组新建一个项目(私有仓库)
# 2.将私有仓库克隆到本地仓库
$ git clone http://192.168.1.50/xcui/base_web_test.git
# 3.添加上游仓库(前端基础底架仓库),并确认远程仓库信息是否正确
$ git remote add upstream http://192.168.1.50/architecture/web_base_frame.git
$ git remote -v
#
origin http://192.168.1.50/xcui/base_web_test.git (fetch)
origin http://192.168.1.50/xcui/base_web_test.git (push)
upstream http://192.168.1.50/architecture/web_base_frame.git (fetch)
upstream http://192.168.1.50/architecture/web_base_frame.git (push)
# 4.初始化上游仓库(前端基础底架仓库)代码到私有仓库
$ git fetch upstream master
$ git checkout master
$ git merge --no-ff -m "更新底座框架" upstream/master --allow-unrelated-histories
$ git push origin master
#
四、配置和使用
4.1. 配置全局用户信息
$ git config --global user.name "Tracine"
$ git config --global user.email "844256131@qq.com"
#
$ git config --global --list
4.2. 生成公钥和私钥
$ ssh-keygen -t rsa
#
#
#
#
4.3. 常用忽略配置
#
#
Thumbs.db
ehthumbs.db
Desktop.ini
#
target
log
logs
.classpath
.settings
.project
.idea
*.iml
*.log*
#
.DS_Store
.vscode
/node_modules
/dist
五、基本命令
#
$ git init [project-name]
$ git clone [url]
$ git log
#
$ git status [filename]
$ git status
#
$ git add [file1] [file2]
$ git add [dir]
$ git add .
$ git checkout .
$ git checkout -- <filename>
#
$ git commit -m "提交描述"
$ git reset HEAD
git reset --soft
git reset --mixed
git reset --hard
$ git reset --hard HEAD
#
$ git pull origin <分支名>
$ git push origin <分支名>
#
$ git branch
$ git branch -a
$ git branch -v
$ git branch <分支名称>
$ git branch -d <分支名称>
$ git branch -D <分支名称>
$ git branch --merged
#
$ git checkout <分支名称>
$ git checkout -b <分支名称>
$ git merge --no-ff -m "merge" <分支名称>
#
$ git tag
$ git checkout <版本号>
$ git tag -a <版本号> -m "<版本注释信息>"
$ git push origin <版本号>
$ git push origin --tags
#
#
git stash save -m "备注的内容"
#
git stash list
#
git stash clear
#
git stash apply
#
git stash pop
#
git stash drop