代码版本控制工具
我们在项目开发过程中,经常会需要将代码回退到前一天或者其他的某个时间节点,这个时候我们可以针对情况对代码进行删除等操作,但是这种删除的操作一般代价都比较大,成本比较高,这个时候我们就可以对我们的代码进行版本控制,当然我可以手动的在开发发某个功能之后,将代码文件都保存一份,然后需要更改回退的时候再将保存好的代码复原,但是这样手动的代码版本控制比较麻烦,出错几率高。
两个代码版本控制工具:git/svn
两者的区别
svn
是集中式管理方式,类似于中央集权制,svn会有一个中央服务器,所有的代码的版本都是管理在中央服务器的,所有开发者都会从中央服务器去选择下载想要的版本的代码,也会将写好的代码进行提交
svn的缺点也很明显:1. 代码版本管理依赖于中央服务器,每个客户端无法在本地进行代码的版本控制 2. 一旦中央服务器奔溃(宕机)甚至数据泄露或者误删的话,整个项目的代码都没办法找回了
git
是分布式管理方式, 每一台客户端都可以看作一个中央服务器,客户端就可以在本地就进行代码版本管理,为了协同合作和代码保护有时也会需要创建一个远端仓库,因为每个客户端其实都会保留完整的代码版本库,所以安全性大大提升。
git 本地基本操作
git也是依赖于命令行工具来执行任务,但git按照后自带GUI可视化界面
git命令行工具中会使用一些linux的操作命令
我们从官网下载了git安装包后进行安装,git也是依赖于命令行工具来执行任务的,但是安装的时候会自带一个GUI这样的可视化界面,市场上也有很多可视化GIT操作,例如tortoisegit, 但是一个好的程序员都不使用可视化工具
操作
1、创建目录
2、进行git仓库的初始化 git init
Reinitialized existing Git repository in E:/git/love-letter/.git/ 初始化了一个空的git仓库在项目目录中的.git文件夹就是本地仓库,里面保存了本地代码
3、提交命令 git add .
项目目录中所有的代码添加到缓存区里
4、查看上一次的提交状态 git status
查看当前git的状态,可以看到是
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: introduce.md
new file: love-letter.md
描述还没有提交,在缓存区里已经有了新文件
5、把缓存区里的文件进行提交,并作出注释 git commit -am '备注的内容'
这个时候会有一个警告:
*** Please tell me who you are.
Run
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'Administrator@DCR8WCBA96DBJX9.(none)')
git进行版本管理的时候,必须得配置一个用户名和邮箱,这样git才能知道操作者是谁,才能运行我们提交
6、配置用户名和邮箱
邮 箱:git config --global user.email "209774229@qq.com"
用户名:git config --global user.name "Ting"
接下来就会出现这样的情况:
[master (root-commit) 8f5a228] 我去抽烟了,此次提交的只是写好了情书的开头,个人介绍中写个了名字
2 files changed, 8 insertions(+)
create mode 100644 introduce.md
create mode 100644 love-letter.md
8f5a228是此次提交的版本号,显示了此次提交的注释和此次提交的代码的变化
7、查看历史版本 git log
查看有哪些版本
8、查看修改后的内容 git diff
可以查看一些当前工作区与暂存区(.git)的代码区别
9、退回某个版本
git reset --hard HEAD^ --------->回退到上一个版本
git reset --hard HEAD^^ --------->回退到上上个版本
git reset --hard HEAD~N --------->回退到第N个版本 N是一个整数
git reset --hard 版本号 --------->回退到指定版本
10、查看每次的版本操作 git reflog
就能看到我们每一次的版本操作,就能找到每个版本的版本号了
更多详细的内容请查看[廖雪峰GIT教程](https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000)
git 本地分支操作
git中提供了分支管理这样的机制,我们可以针对不同的功能模块利用不同的分支来管理(branch)
1、创建分支 git branch 分支名
2、查看分支 git branch
包括了自己创建的本地子分支和本地主分支master
master是创建git init时自动创建的本地组分支,而master前面的*,代表当前所在的分支
而自己创建的分支为本地子分支
3、切换分支 git checkout 分支名
切换分支后,进行操作之后,记得也要提交,并且,分支里面的各种操作对于其他分支来说都是独立的,彼此之间不能相互控制版本
4、合并分支 git merge 分支名
当我们项目中某个功能模块开发完成后,比如introduce已经开发完成了,需要切换回master分支,因为master分支上的代码才是真正的项目代码,最终上线的代码都在master中在A分支中执行 git merge B,就是把B分支的代码合并到A分支来
5、查看哪个版本在合并时删除了某个文件 git log --diff-filter=D --summary
当我们合并了分支之后,可能master中有a这个文件,但是在B分支中没有a这个文件,所以合并后可能a这个文件就被误删,这个时候执行:git log --diff-filter=D --summary可以看到是哪个版本在提交的时候删除了
6、恢复误删的文件 git checkout 486532~1 文件名+扩展名
情况主要是因为,master中有两个文件,但是在分支中都各只有一个文件,导致合并过来的时候出现了问题,所以,其实我们应该保证,分支中的代码和master中的文件应该是只能多不能少
7、尽量保证进入新创建的分支后,别删除之前的其他的文件,不然的话在和本地主分支合并时会误删文件。当在A中修改了某个文件,在master中合并了,在B中也修改了这个文件,在master中合并的时候会出现冲突,出现>>>><<<<<=====>>>>>描述更改的地方,所以可以利用编辑器来处理冲突,也可以手动的删去不想要的内容,冲突解决完成后,才能再次提交
github 远端仓库操作
1、注册github账户并登录
2、配置ssh key ssh-keygen -t rsa -C "github账号的邮箱"
生成好之后默认是保存在 /c/Users/Administrator/.ssh/id_rsa.pub中
3、将id_rsa.pub中生成的key复制到github中的new ssh key中
在github网站中点击setting里,有个SSH and GPG key
4、在git中配置全局email和name
邮 箱:git config --global user.email "209774229@qq.com"
用户名:git config --global user.name "tis1002**"
为了和github远端仓库做联系,我们将email和name配置成github账号的email和name
5、与远端仓库关联的两种方式
1)先建立仓库,再去开发 克隆远端仓库
a) 在本地执行 git clone远端仓库地址
b)然后再进行开发合并等操作 每次操作都要add和commit
c)将本地文件提交到远端仓库中 git push origin master/git push -u origin master -f 强制推上
2)先建立仓库,再clone,再开发,也可以先开发,再建仓,再关联
a)搭建node环境
b)创建本地仓库初始化 git init
c)进行git本地操作 每次操作都要add和commit
d)合并以及提交版本 git merge
f)与远端仓库进行关联 git remote add origin 远端仓库的地址
e)提交到远端仓库 git push origin maste/git push -u origin master -f 强制推上
在每次push代码到远端的时候应该先git pull一次,将远端代码拉下来之后合并一下,没问题之后再push