GIT
1. 为什么要开发项目要有版本控制
在企业开发中,企业项目代码都需要有版本控制
为什么要有版本控制?
公司5个员工同时开发一个项目,不同员工开发的代码相互之间如何同步呢?让A来管理,剩下四个代码都发给A,让A来一个个文件对,一行行对,看看今天大家都开发了什么代码?很显然不现实
解决方案:使用专业版本控制工具
CVS :最早期的版本控制工具(现在基本已经淘汰)
SVN :集中式版本控制工具,目前还有一定市场份额
GIT : 目前最流行的分布式版本控制系统
2. GIT简介
2.1. Git是什么?
Git是目前世界上最先进的分布式版本控制系统。
Linux 操作系统的作者 林纳斯·托瓦兹
林纳斯·托瓦兹花了两种时间写 git 第一个版本,使用c
语言编写的分布式版本控制系统
工作原理 / 流程:
Workspace:工作区
Index / Stage:暂存区
Repository:仓库区(或本地仓库)
Remote:远程仓库
2.2. 集中式 VS 分布式 介绍
2.2.1. 集中式版本控制
先说集中式版本控制系统,版本库是集中存放在中央服务器的,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。中央服务器就好比是一个图书馆,你要改一本书,必须先从图书馆借出来,然后回到家自己改,改完了,再放回图书馆。
缺点:
集中式版本控制系统最大的毛病就是必须联网才能工作,如果在局域网内还好,带宽够大,速度够快,可如果在互联网上,遇到网速慢的话,可能提交一个 10M 的文件就需要 5 分钟,这还不得把人给憋死啊。
2.2.2. 分布式版本控制
那分布式版本控制系统与集中式版本控制系统有何不同呢?首先,分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是一个完整的版本库,这样,你工作的时候,就不需要联网了,因为版本库就在你自己的电脑上。既然每个人电脑上都有一个完整的版本库,那多个人如何协作呢?比方说你在自己电脑上改了文件 A,你的同事也在他的电脑上改了文件 A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
和集中式版本控制系统相比,分布式版本控制系统的安全性要高很多,因为每个人电脑里都有完整的版本库,某一个人的电脑坏掉了不要紧,随便从其他人那里复制一个就可以了。而集中式版本控制系统的中央服务器要是出了问题,所有人都没法干活了。
在实际使用分布式版本控制系统的时候,其实很少在两人之间的电脑上推送版本库的修改,因为可能你们俩不在一个局域网内,两台电脑互相访问不了,也可能今天你的同事病了,他的电脑压根没有开机。因此,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改,没有它大家也一样干活,只是交换修改不方便而已。
当然,Git 的优势不单是不必联网这么简单,后面我们还会看到 Git 极其强大的分支管理,把 SVN 等远远抛在了后面。
2.3. GIT的发明
Linux 操作系统 林拉斯,花了两周时间写了第一版本,使用C语言编写
3. Git 安装及初始化
1 安装
3.1.1. 在windows上如何安装Git?
要使用 Git,第一步当然是安装 Git 了。msysgit 是 Windows 版的 Git,从 https://git-for-windows.github.io 下载,然后按默认选项安装即可。
msysgit是 windows版的Git,如下:
需要从网上下载一个,然后进行默认安装即可。安装完成后,在开始菜单里面找到 "Git --> Git Bash",如下:
出来 git 菜单就表示安装成功
4. 远程仓库
- 远程仓库可以 自己使用 gitlib 搭建,需要购买一个一台云服务器vps
- 使用第三方托管服务器
(1) Github https://github.com/
(2) Gitee https://gitee.com/
这个两个第三托管网站都有 免费版,和收费版
5. github
Git 是分布式版本控制系统,同一个 Git 仓库,可以分布到不同的机器上。怎么分布呢?最早,肯定只有一台机器有一个原始版本库,此后,别的机器可以“克隆”这个原始版本库,而且每台机器的版本库其实都是一样的,并没有主次之分。
找一台电脑充当服务器的角色,每天24小时开机,其他每个人都从这个“服务器”仓库克隆一份到自己的电脑上,并且各自把各自的提交推送到服务器仓库里,也从服务器仓库中拉取别人的提交。
可以自己搭建一台运行 Git 的服务器,不过现阶段,为了学 Git 先搭个服务器绝对是小题大作。好在这个世界上有个叫 GitHub 的神奇的网站,从名字就可以看出,这个网站就是提供 Git 仓库托管服务的,所以,只要注册一个 GitHub 账号,就可以免费获得 Git 远程仓库。
5.1. 生成公钥私钥
在了解之前,先注册github账号,由于你的本地Git仓库和github仓库之间的传输是通过SSH加密的,所以需要一点设置:
5.1.1. 创建SSH Key。
在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果有的话,直接跳过此如下命令,如果没有的话,打开命令行,输入如下命令:
ssh-keygen -t rsa –C "youremail@example.com", 由于我本地此前运行过一次,所以本地有,如下所示:
id_rsa是私钥,不能泄露出去,id_rsa.pub是公钥,可以放心地告诉任何人。
5.1.2. Github 设置秘钥
登录github,打开” settings”中的SSH Keys页面,然后点击“Add SSH Key”,填上任意title,在Key文本框里黏贴id_rsa.pub文件的内容。
5.2. 如何添加远程库
现在的情景是:我们已经在本地创建了一个Git仓库后,又想在github创建一个Git仓库,并且希望这两个仓库进行远程同步,这样github的仓库可以作为备份,又可以其他人通过该仓库来协作。
首先,登录github上,然后在右上角找到“create a new repo”创建一个新的仓库。如下:
5.3. 从远程库克隆
git clone [url]
会自动创建一个 masetr 分支跟踪远程分支 origin/master
5.4. 从远程仓库抓取数据
fetch 命令只是将远端的数据拉到本地仓库,并不自动合并到当前工作分支,只有当你确实准备好了,才能手工合并。
若设置了某个分支用于跟踪某个远端仓库的分支,可以使用 git pull 命令自动抓取数据下来,然后将远端分支自动合并到本地仓库中当前分支。
默认情况下 git clone 命令本质上就是自动创建了本地的 master 分支用于跟踪远程仓库中的 master 分支(假设远程仓库确实有
master 分支)。所以一般我们运行 git pull,目的都是要从原始克隆的远端仓库中抓取数据后,合并到工作目录中当前分支。
到远程仓库中拉取所有你本地仓库中还没有的数据
git fetch [remote-name]
git merge origin/master
git pull origin master |
5.5. 推送数据到远程仓库
只有在所克隆的服务器上有写权限,或者同一时刻没有其他人在推数据,这条命令才会如期完成任务。
若在你推数据前,已经有其他人推送了若干更新,那你的推送操作就会被驳回。你必须先把他们的更新抓取到本地,并到自己的项目中,然后才可以再次推送。
把本地的 master 分支推送到 origin 服务器上
git push origin master |
5.6. 使用Eclipse管理git项目
如果项目已经开发一个阶段,把项目放入到和githu上远程仓库本地git仓库里面
5.6.1. 在Eclipse中导入项目
5.6.2. 把项目提交到仓库被仓库管理
5.6.3. 忽略target目录的管理
Target 是maven项目打包安装以后生成的目录,我们开发只需要同步开发,不需要同步安装包,所以 maven的-target需要忽略
5.6.4. 添加项目到git仓库
添加后效果
5.7. 将代码提交到git仓库
提交操作
提交后的效果
5.7.1. 将本地仓库同步到远程仓库
5.7.2. 修改后代码效果
5.8. 同步git其他团队代码
aib |
6. 码云-https://gitee.com、
码云是一个国产的基于git分布式托管中心,比较符合国情,速度快,可以有个人版本和企业版本。
1. 注册账号
2. 登录账号
6.1. 创建远程仓库
6.2. 把仓库克隆到本地电脑
其他的代码同步操作和 github一样
6.3. 添加团队协作开发成员
首先你添加用户必须在码云上注册账号