版本管理的演变
vsc出现前
- 用目录拷贝区别不同版本
- 公共文件容易被覆盖
- 成员沟通成本很高,代码集成效率低下
集中式VSC
- 有集中的版本管理服务器
- 具备文件版本管理和分支管理能力
- 集成效率有明显的提高
- 客户端必须时刻与服务器相连
分布式VSC
- 服务端和客户端都有完整的版本库
- 脱离服务端,客户端照样可以管理版本
- 查看历史和版本比较等多数操作,都不需要访问服务器,比集中式VSC更能提高版本管理效率
Git
git的特点
- 最优的存储能力
- 非凡的性能
- 开源的
- 很容易做备份
- 支持离线操作
- 很容易定制工作流程
最小配置
$git config --global user.name 'your_name'
$git config --global user.email 'your_email@domain.com'
$git config --local #local只对某个仓库有效
$git config --global #global对当前用户所有仓库有效
$git config --system #system对系统所有登录的用户有效
显示 config 的配置,加 --list
$git config --list --local
$git config --list --global
$git config --list --system
建git仓库
把已有的项目代码纳入git管理
$cd 项目所在的文件夹
$git init
新建的项目直接用git管理
$cd 某个文件夹
$git init your_project #会在当前路径创建和项目名称同名的文件夹
$cd your_project
工作区和暂存区
工作目录->暂存区
git add files
暂存区->版本历史
git commit
文件重命名
git mv 变更文件名 变更后文件名
查看历史
git log
查看简洁的历史
git log --oneline
只看最近的四次
git log -n4 --oneline
看某个分支
git log --oneline 分支名
删除分支
git branch -D 分支名
修改最近一次commit的message
git commit --amend
修改历史commit
git rebase -i 父级commit的id
暂存区和HEAD比较
git diff --cached
工作区和暂存区比较
git diff
让暂存区恢复成和HEAD的一样
git reset HEAD
让工作区的恢复为暂存区一样
git checkout --文件名
取消暂存区部分文件的更改
git reset HEAD --文件名
消除最近的几次提交
git reset --hard 要保留的commit的id
看看不同提交的指定文件的差异
git diff 分支1 分支2
git diff 分支1 分支2 文件名
删除文件
git rm 文件名
stash和文件
git stash #存入
git stash apply #取出,保留stash信息
git stash pop #取出,丢掉stash信息
如何将git仓库备份到本地
常用协议 | 语法格式 | 说明 |
---|---|---|
本地协议(1) | /path/to/repo.git | 哑协议 |
本地协议(2) | file:// /path/to/repo.git | 智能协议 |
http/https协议 | http://git-server.com:port/path/to/repo.git | 平时接触到的都是智能协议 |
ssh协议 | user@git-server.com:path/to/repo.git | 工作中最常用的智能协议 |
哑协议与智能协议
- 哑协议传输进度不可见;智能协议传输可见
- 智能协议比哑协议传输速度快
禁止向集成分支执行的操作
危险的操作: 会删除变更的历史
git reset --hard commit的id
危险的操作:不能pull以后进行rebase操作
Github
如何快速淘到感兴趣的开源项目
关键字
在仓库名和仓库描述中进行查询
关键字 in:readme
在readme中进行查询
关键字 starts>1000
根据星的 数量进行查询
怎么选择适合团队的工作流
主干开发
Git Flow
GitHub Flow
GitLab Flow
GitLab Flow(带环境分支)
GitLab Flow(带发布分支)