这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
一、版本控制系统
- 对比
| 类型 | 代表工具 | 优点 | 缺点 |
|---|---|---|---|
| 本地版本控制 | RCS | - | 只能本地使用,无法进行团队协作 |
| 集中式版本控制 | SVN | 学习简单,容易操作;支持二进制文件,对大文件支持友好 | 不存在存储版本管理的概念,提交需连上服务器;本地不保存所有版本代码,如遇故障容易导致历史版本丢失 |
| 分布式版本控制 | Git | 分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体:分支管理功能强大,方便团队合作;校验和机制保证完整性,不容易导致代码丢失 | 相对SVN更复杂,学习成本高 |
二、命令整理
1、本地
- 创建新的仓库
git init - 配置
- 用户名配置
git config --global user.name "username" git config --global user.email "emailname@mail" - Instead of 配置
git config --global url.git@github.com:.insteadOf https://github.com/ - Git命令别名配置
git config --global alias.cin "commit --amend --no-edit"
- 用户名配置
- Git Remote
- 查看Remote
git remote -v - 添加Remote
git remote add origin_ssh git@github.com:git/git.git git remote add origin_http https://github.com:git/git.git
- 查看Remote
- 显示需提交的文件
git status
- 添加文件至暂存区
git add .
- 在版本历史记录中记录文件
git commit -m "message"
- 查看文件信息
git cat-file -p [TreeID/BlobID/CommitID]
- 创建新分支 ---开发阶段
git checkout -b name
- 生成标签
git tag versionname
- 修改历史版本
- 修改最近一次,修改后CommitID会改变
git commit --amend -m "message" - 实现对最近三个commit的修改
git rebase -i HEAD~3 - 重写分支
git filter-branch
- 修改最近一次,修改后CommitID会改变
- Git GC
git reflog eapire --expire=now --all
git gc --prune=now
2、远端和团队协作
- 拉取完整的仓库到本地
git clone
- 远端某些分支最新代码拉取到本地,不执行merge操作
git fetch
- 拉取远端某分支并与本地合并
- git pull相当于进行了git fetch和git merge操作
git pull - git pull --rebase相当于进行了git fetch和git rebase操作
git pull --rebase
- git pull相当于进行了git fetch和git merge操作
- 将本地代码同步到远端
git push origin master
三、git研发流程
-
工作流 | 类型 | 代表平台 |特点|合入方式| | --- | --- | - |-| | 集中式工作流 | Gerrit/SVN | 只依托与主干分支进行开发,不存在其他分支|Fast-forward| | 分支管理工作流 | Github/Gitlab |可以定义不同的分支,上线分支,分支开发完成后通过MR/PR合入主干分支|自定义(Fast-Forward/Three-Way Merge)|
-
Fast-Forward -> 合并后保持线性历史,不会产生merge节点
-
Three-Way Merge -> 会产生merge节点
资料