分布式版本管理系统。在本地分支干活,干完活push到远程分支,切换到本地master,拉取最新master,合并本地分支,合并后推送远程master,切换会本地分支。
Git简介
- Git是最流行的分布式版本控制系统,尤其是2008年,GitHub网站上线了,它为开源项目免费提供Git存储,无数开源项目开始迁移至GitHub,包括jQuery,PHP,Ruby等等。
集中式和分布式
- 集中式
- 版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器
- 分布式
- 根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上
安装Git
创建版本库
- 版本库又被称为仓库,【repository】,初期可以理解为一个目录,这个目录里面管理的文件都可以称为被git管理起来的,每个文件的修改,删除等的操作git都能进行跟踪
- git init
- git config --global user.email "you@example.com"
git config --global user.name "Your Name"
# cat查看时可以显示
git config --local user.email "you@example.com"
git config --local user.name "Your Name"
- 设置账号的缺省身份标识
- 用户名和邮箱来自github上的注册
- git add filename
- git commit -m "日志"
- git commit -a -m '日志'
- git commit -a 相当于运行 git add 把所有当前目录下的文件加入暂存区域再运行
- 多次add添加,commit提交一次
版本回退
- git status
- git diff filename
- git reset --hard 版本号【commit id】
- git log
- git reflog
- 用git reflog查看历史执行过的git操作,从上往下寻找第一个commit的操作,则是未来的最新的版本
工作区与版本库
- 工作区
- 就是你电脑中的能看到的目录【python2020】
- 版本库
- 工作区中有一个隐藏的目录.git,该目录就是git中的版本库
- 暂存区
- git仓库
其他命令
- git checkout -- a.txt
- git reset HEAD a.txt
$PATH变量
- 如果需要直接执行某个命令,需要将其添加至PATH路径中
- echo $PATH
- PATH=${PATH}:/opt/bin
- 追加PATH
- 暂时
- 如果需要永久追加,需要将其写入.bashrc(家目录或者etc下的.bashrc)
- 或者将软链接放入path
- n -s /root/lotuslaw /usr/bin/lotuslaw
时光穿梭机
- git status
- git diff filename
- git reset --hard 【commit id】
- git checkout -- <文件>
- git reset HEAD <文件>
- 对于删除文件的跟踪
- rm file
git rm file # 相当于add
git commit -m '日志'
远程仓库
- 准备
- 创建GitHub账号
- 生成ssh key
- 密钥,建立本地和网络之间的连接
- ssh-keygen -t rsa -C "github的注册邮箱"
- cat .ssh/id_rsa.pub
- 添加私钥
- ssh-agent bash
ssh-add id_rsa
- 密钥GitHub
- 检测是否添加成功
- ssh -T git@github.com
- 码云:ssh -T git@git.oschina.net
- 建立连接
- 将本地仓库和远程仓库联系起来
- git remote add origin ssh地址
- git push [-u] origin master
- 推送本地仓库到远处仓库
- 第一次加-u
- 如果版本有问题,先拉取再推送
- git push --all
- git pull origin master
- 从远程仓库拉取分支到本地
- git pull --all
- 本地修改----> add到暂存区 ---> commit到本地仓库 ---> push到远程仓库
- 克隆
- git clone ssh地址
- 克隆到本地之后,就可以任意修改本地工作区中的文件,修改完成之后,首先将修改add到暂存区,然后将暂存区中的修改提交到本地仓库,最后将本地仓库中的修改推送到远程仓库
- 克隆远程仓库到本地(会自动创建本地仓库并关联)
分支管理
- 创建、合并分支
- git checkout -b dev
- git branch
- git checkout master
- git merge dev
- 在master分支下合并分支
- 合并某个子分支到当前分支
- git branch -d dev
- 解决冲突
- - 当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。
- 解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。
- 用git log --graph命令可以看到分支合并图
- 分支合并策略
- > - master分支应该是非常稳定的,仅仅使用master分支发布版本,平时不在上面干活
> - 比如:每个人都在dev的分支上干活,每个人都有自己的分支,时不时的向dev上合并代码就可以了
> - 比如:发布1.0版本,再把dev上的代码合并到master上面
> - 合并分支时,加上--no-ff参数表示使用普通模式进行合并,合并之后可以查看历史 记录,而Fast-Forword快速模式没有历史记录
- 合并分支时,如果可能,Git会用Fast forward模式,但这种模式下,删除分支后,会丢掉分支信息
- 如果要强制禁用Fast forward模式,Git就会在merge时生成一个新的commit,这样,从分支历史上就可以看出分支信息
- git merge --no-ff -m "222-1" dev
- git log --graph
标签管理
- 创建标签
- git tag v1.0
- git tag v2.0 ae20ec5
- git tag
- 操作标签
- git show v1.0
- git tag -a v0.1 -m "version 0.1" e7423195
- git tag -d v0.1
- git push origin --tags
- git push origin :refs/tags/v0.2
解析地址
- /etc/hosts
- 10.36.139.5 git.test.com