1、版本控制工具
1.1 集中式版本控制工具
CVS、SVN、VSS……
集中化的版本控制系统都有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新
-
优点:
- 管理方便,逻辑明确,符合一般人思维习惯
- 易于管理,集中式服务器更能保证安全性
- 代码一致性非常高
- 代码一致性非常高
-
缺点:
-
服务器压力太大,数据库容量暴增
-
如果不能连接到服务器上,基本上不可以工作(如果服务器不能连接上,就不能提交、还原、对比等等)
-
不适合开源开发(开发人数非常非常多,但是 Google app engine 就是用 svn 的)。
但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题
-
1.2 分布式版本控制工具
Git、Mercurial、Bazaar、Darcs……
像 Git 这种分布式版本控制工具,客户端提取的不是最新版本的文件快照,而是把代码仓库完整地镜像下来(本地库)。这样任何一处协同工作用的文件发生故障,事后都可以用其他客户端的本地仓库进行恢复。因为每个客户端的每一次文件提取操作,实际上都是一次对整个文件仓库的完整备份
-
优点:
- 每个客户端保存的也都是整个完整的项目(包含历史记录,更加安全)
- 公共服务器压力和数据量都不会太大,任意两个开发者之间可以很容易的解决冲突
- 速度快、灵活。
- 离线工作, 服务器断网的情况下也可以进行开发(因为版本控制是在本地进行的)
-
缺点:
- 学习周期相对而言比较长,不符合常规思维
- 代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息
2、Git
2.1 Git 工作原理
2.2 Git 常用命令
有时候拉取代码失败:error: RPC failed; curl 18 transfer closed with outstanding read data remaining
的解决方法:
- 加大缓存区:
git config --global 克隆地址 524288000
- 减少克隆深度:
git clone 克隆地址 --depth 1
- http 方式换成 SSH 的方式
2.3 分支图解
-
主干分支 master:
主要负责管理正在运行的生产环境代码。永远保持与正在运行的生产环境完全一致。严禁从 develop 分支或 feature 分支直接合并到 master 分支
-
开发分支 develop:
主要负责管理正在开发过程中的代码。一般情况下应该是最新的代码。
-
bug 修理分支 hotfix:
主要负责管理生产环境下出现的紧急修复的代码。从主干分支分出,修理完毕并测试上线后,并回主干分支。并回后,视情况可以删除该分支。
-
准生产分支(预发布分支)release:
较大的版本上线前,会从开发分支中分出准生产分支,进行最后阶段的集成测试。该版本上线后,会合并到主干分支。生产环境运行一段阶段较稳定后可视情况删除。
-
功能分支 feature:
为了不影响较短周期的开发工作,一般把中长期开发模块,会从开发分支中独立出来。开发完成后合并到开发分支。

3、Git 与 GitHub
一句话来说,Git 是一个版本管理工具,GitHub 是基于 Git 的一个仓库托管平台(当然 GitHub 现在也远不止于此)
3.1 SSH 免密登录
首先注册 GitHub 账号,由于本地 Git 仓库和 GitHub 仓库之间的传输方式是通过 SSH 加密的,所以需要一些设置:
-
创建 SSH key。在用户主目录下
C:\Users\60279\
查看有没有.ssh
目录,如果有再看看这个目录下是否存在id_rsa
和id_rsa.pub
这两个文件,如果没有,打开命令行输入如下命令:ssh-keygen -t rsa –C "你的 GitHub 注册邮箱"
-
按如下步骤找到相应的位置添加信息
-
将
id_rsa.pub
中的文件内容,复制到 key 中,标题自定义即可 -
显示如下页面,即为成功
3.2 创建仓库
-
首先创建一个新的仓库,填入仓库名
-
目前 GitHub 上的这个仓库还是空的,可以从这个仓库克隆出新仓库,也可以把一个已有的仓库与之关联
3.3 IDEA 集成 GitHub
3.3.1 配置 Git 忽略文件
与项目的实际功能无关,且不参与服务器上部署运行。把他们忽略能够屏蔽 IDE 工具之间的差异
-
创建忽略规则文件 xxx.ignore(建议是 git.ignore)
-
便于管理建议放在家目录
C:\Users\60279
下 -
git.ignore
文件模板:# Compiled class file *.class # Log file *.log # BlueJ files *.ctxt # Mobile Tools for Java (J2ME) .mtj.tmp/ # Package Files # *.jar *.war *.nar *.ear *.zip *.tar.gz *.rar # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* replay_pid* .classpath .project .settings .idea *.iml target out
-
.gitconfig
文件中引用忽略配置文件[user] name = PendulumYe email = 602795356@qq.com [core] excludesfile = C:/Users/60279/git.ignore
3.3.2 定位 Git 程序
3.3.3 设置 GitHub 账号
可以添加多个账号,如果连接不上可以使用先去 GitHub 上设置好 token 然后使用 token 的方法时登录
3.3.4 分享工程至 GitHub
对于本地初始时不是 GitHub 的项目可以通过如下操作,在 GitHub 上创建一个远程仓库
3.3.5 推送本地库到远程库
-
可以通过右上方的快捷方式
-
也可以通过左侧边栏
-
也可以通过鼠标右键的方式
注意:push 是将本地库代码推送到远程库,如果本地库代码跟远程库代码版本不一致,push 的操作是会被拒绝的。也就是说,要想 push 成功,一定要保证本地库的版本要比远程库的版本高
因此,要先 pull 拉取一下远程库的代码,再修改、提交、推送
3.3.6 切换版本
3.3.7 创建分支
3.3.8 合并分支
-
如果代码没有冲突,分支直接合并成功,分支合并成功以后,代码自动提交,无需手动提交至本地库
-
如果 master 分支和 hot-fix 分支都修改了代码,在合并分支的时候就会发生冲突
手动合并玩代码以后,点击右下角的Apply按钮,代码冲突解决,自动提交至本地库
3.3.9 拉取代码从远程库到本地库
pull 是拉取远端仓库代码到本地,如果远程库代码和本地库代码不一致,会自动合并,如果自动合并失败,还会涉及到手动解决冲突的问题。
3.3.10 克隆远程库到本地
通过 IDEA 集成 Git 拉取代码的时候,默认拉取的是 master 分支
3.4 Git、GitHub、Gitee、GitLab 四者关系
- Git 是一种基于命令的版本控制系统,全命令操作,没有可视化界面
- GitLab 是一个基于 Git 实现的在线代码仓库软件,提供 Web 可视化管理界面,通常用于企业团队内部协作开发
- Gitee 可以简单的认为就是国内中文版的 GitHub
- GitHub 是一个基于 Git 实现的在线代码托管仓库,亦提供可视化管理界面,同时免费账户和提供付费账户,提供开放和私有的仓库,大部分的开源项目都选择 GitHub 作为代码托管仓库
4、SVN
4.1 基本概念
- Repository(源代码库):源代码统一存放的地方
- Checkout(提取):当你手上没有源代码的时候,你需要从 Repository 中 Checkout 一份
- Commit(提交):当你已经修改了代码,你就需要 Commit 到 Repository
- Update (更新):当你已经 Checkout 了一份源代码, Update 后就可以和 Repository 上的源代码同步
4.2 SVN 工作原理
4.3 SVN 详细使用操作
由于目前 SVN 整体使用可能较少一些,因此具体操作可以查看该博文内容,很详细
1 条评论