版本控制工具的作用:保存工作的副本,保留代码更改的历史纪录,在需要时返回到工作版本
版本控制的最主要的两个功能是版本的回滚和版本的合并
常见的版本控制
集中式
只有一台版本服务器
必须联网才能工作
-
CVS
最早的开源免费的集中式版本控制工具 -
SVN
修正了cvs的一些稳定性问题
分布式
每一台电脑都是服务器,强大的分支管理
有本地仓库和远程仓库
- GIT
GIT
下载安装
下载git
安装基本都是下一步即可
git使用
发送用户名和邮箱给git
每次git提交都需要用户名和邮箱
git config --global user.name "xxx"
git config --global user.email "xxx"
如果不同项目使用不同的用户名和邮箱时,去掉–global执行,需要在有git项目的目录中
查看用户信息
git config --list
创建版本库repository
版本库:可以简单的理解成一个目录,这个目录的所有文件都可以被git管理起来,每个文件的修改,删除,git都能跟踪,以便任何时候都可以追踪历史,或者在将来的某个时刻可以还原
- 首先创建一个项目目录(文件夹)
- 在该目录下右键打开Git Bash Here,执行git init
git init
- 文件夹中出现了.git的隐藏文件夹
创建忽略文件
编译的中间文件,比如build中文件,.class文件等,不需要上传到git,就可以通过忽略文件来实现
- 工程目录下创建.gitignore文件
touch .gitignore
- 忽略文件的标准
忽略操作系统自动生成的文件,比如缩略图等。
忽略编译生成的文件等
忽略自己带有的敏感信息的配置文件
可以参考github/ignore
状态命令
查看上次向git提交更改以来修改了哪些文件
版本控制系统只能跟踪文本文件的改动
二进制文件没法跟踪文件的变化(只知道改变了大小,不知道具体改了什么)
红色文件表示未跟踪的文件
git status
提交到版本库中
添加
- 添加一个文件
git add 文件名
- 一次添加多个
git add --all
提交
git commit -m "描述"
-m后面表示提交的说明
提交记录查看
- 查看完整的提交记录
git log
- 查看最近n次提交记录
git log -n
版本管理
版本回退
-
当前版本往上回退一个版本
git reset --hard HEAD^
-
往上回退n个版本
git rest --hard HEAD~n
-
回退到某一个版本
git reset --hard id
id不需要全拷贝
-
如果回退之后后悔,想恢复到最新版本
通过git reflog查看每一次记录
回退到指定的id
分支管理
每个开发人员都有一个分支,通常还有div分支以及master分支
创建与删除分支
-
查看当前分支
git branch
-
创建分支
git branch zs
-
创建并切换分支
git checkout -b zs 这个相当于两个命令 git branch zs 创建zs分支 git checkout zs 切换到zs分支
-
删除分支
git branch -d zs
合并分支
把其他分支的内容合并到master分支上
-
合并到master分支
切换到master分支 git merge zs
没有冲突是Fast-forward快进模式
分支冲突
如果不同分支提交相同的文件时则产生冲突
冲突文件
修改冲突文件,比如:
在master分支上面提交,这时其他分支的冲突文件内容还是原来的内容,需要同步master分支的这个文件,所以需要在其他分支合并master分支
远程仓库github
github分为http连接和ssh连接
http连接速度慢,每次连接都需要输入账号密码
使用ssh连接需要配置公钥和私钥,推荐
附加:解决github无法登录
SSH
-
创建SSH Key
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件。如果没有,执行下面的命令创建SSH Key
$ ssh-keygen -t rsa -C "youremail@example.com"
建议使用真实邮箱
id_rsa是私钥,id_rsa_pub是公钥
- 登录github,打开settings,ssh keys页面,然后点击"New SSH Key",填上任意的title,再key文本框中粘贴id_rsa.pub文件的内容
创建远程仓库
- 在github中点击"New repository"按步骤创建即可
- 创建成功后
添加远程仓库
可以从仓库中克隆出新的仓库,也可以把本地仓库与之关联,然后把本地仓库的内容推送到github仓库
-
本地仓库关联远程仓库
添加一个名称为origin的远程仓库 git remote add origin SSH地址
-
查看当前远程仓库
git remote
推送到远程仓库
-
推送到远程仓库
git push -u origin master分支
把当前分支master推送到远程的master分支,-u会把本地master分支和远程master分支关联起来
下次再提交的话,可以简便git push origin master
推送分支
推送到master
不同的分支,最终要提交到master分支,进行合并
需要再本地分支,先合并到master中,然后把本地master再推送到远程的master
从远程仓库克隆
-
克隆一个本地仓库
在新的文件夹中,右键打开git bash git clone 仓库地址 如果是http,直接访问即可 如果是ssh,则需要master管理添加了你电脑的ssh key
-
克隆其他分支
查看远程分支
git branch -a
切换分支
git checkout 分支
-
远程仓库更新
每次修改之前,首先要从仓库中拉取最新的内容 git pull 修改完冲突后,再push到远程
-
删除远程分支
git push origin --delete 分支
一般项目的开发,首先从分配的分支进行下载,下载到本地后,默认有master分支,新建一个自己的分支,编辑,确定代码没问题时,可以进行提交,可以提交到远程此分支。合并master时,首先在本地合并到master中,确保没问题时,提交到远程的master分支中。如果提交到远程master分支时出现冲突,则需要使用git pull更新master,在本地进行冲突修改,修改完成后,提交到远程的master分支即可