首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

iOS开发之进阶篇(3)——版本控制

目录

前言

本地仓库 (使用Sourcetree)

远程仓库 (使用GitHub)

前言

本文仅简单讨论代码的版本控制, 包括版本提交、分支、远程仓库的拉取/推送、版本回退等, 不探讨Git指令, 不涉及多人协作, 更多的是客户端使用过程的记录.

分别使用Sourcetree和GitHub客户端实现对代码的版本控制, 两者操作起来都差不多, 故分别用于演示管理本地仓库和远程仓库. 远程仓库需要服务器来储存项目代码, 自从微软收购GitHub后, 对私有项目也开放免费了, 所以远程客仓库的拉取/推送操作将使用GitHub客户端来演示.

所谓仓库, 可以理解成一个项目, 或者是这个项目对应的文件夹.

本地仓库 (使用Sourcetree)

Sourcetree客户端下载地址https://www.sourcetreeapp.com/

1. 创建本地仓库

新建一个文件夹LocalRepository, 装入一个文件README.md, 随便填入初版信息:

file_readme.png

打开Sourcetree客户端, 创建本地仓库

sourcetree_create.png

指定刚才创建的文件夹

sourcetree_create2.png

成功创建仓库, 右边数字代表修改量

sourcetree_create3.png

双击进入主界面

sourcetree_commit.png

勾选待定的文件(表示放入暂存区), 填入版本记录信息, 然后提交, 这时历史版本中就有版本记录了.

sourcetree_histories.png

2. 新增版本

我们回到刚才的README.md文件, 新增一行信息:

file_readme2.png

然后我们看到Sourcetree中文件状态里新增了未保存的修改:

sourcetree_file_status.png

勾选文件, 填入版本记录信息"下雨了", 然后提交:

sourcetree_commit2.png

可以看到历史中有了版本记录:

sourcetree_histories2.png

讨论

至此, 我们已经完成了第一次版本迭代. 但是有个问题, 本次修改版本是直接在主分支master上面进行的, 而master应该用于储存可发布的稳定版本, 不应直接供给开发阶段使用.

实际开发中, 我们应先分离出一个分支进行开发, 调试无误后再合并到master进而发布. 这样即可以防止多人协作同时对master进行操作造成冲突, 同时又可以分出多个分支进行多功能"并行"开发.

假设这样一种情况:

当我们在master上直接开发新功能, 开发到一半的时候发现原来的代码有bug, 这时候我们只有两种选择: 要么写完另一半功能再去调试bug, 要么遗弃现有的一半功能代码去调试bug. 这种做法好比是"线程阻塞式"的, 似乎不符合我们的需求. 那么, 此时分支可以闪亮登场了. 创建一个分支去开发这个新功能, 此时我们会有两个分支: master和新功能分支. 当我们在功能分支上开发到一半的时候发现原来代码有bug, 我们可以切换到master分支去, 另创建一个临时分支用于修复bug, bug修复后将临时分支合并到master用于发布更新, 功能分支调试无误后也合并到master, 最后形成稳定的代码版本.

我们之所以能在各分支之间随意切换, 是因为分支之间的版本管理是相互独立的, 详见下节.

3. 分支

这个例子的流程如下:

当发布"下雨了"这个版本后, 我们新建一个买菜分支去买鱼和豆腐, 买完鱼后才想起家里没有关窗 (代码有bug). 这时我们可以切换到master, 把窗关上(bug修复), 然后重新切回买菜分支, 继续买豆腐, 然后回到家里 (称为合并).

新建分支

点击"分支"按钮, 或者直接在指定版本上右击选择分支...

sourcetree_branch.png

选择指定节点, 起名买菜

sourcetree_branch2.png

然后我们看到分支那里, 多了"买菜"这个分支:

sourcetree_master&买菜.png

这时候当前分支已经切换到买菜这里了, 以后的修改将只对当前分支有效. 要想切换分支, 双击分支中的分支名即可.

返回我们的工程项目文件夹LocalRepository, 新增一个买菜文件:

file_买菜.png

然后看到文件状态那里有更新, 我们将这个提交一个版本, 备注买鱼, 提交到"买菜"分支 (此时我们正处于这个分支上):

sourcetree_买菜_file_status.png

然后点击历史, 查看版本记录:

sourcetree_histories3.png

切换分支

此时, 买菜分支比master超前了一个版本(买鱼版本).

我们可以验证下, 在分支中双击master切换到主分支, 此时我们的项目文件夹LocalRepository下买菜文件没有了:

file_master.png

而切换回买菜分支, 又出现了买菜这个文件:

file_买菜.png

现在我们切换回master, 新建一个temp分支去修复bug (关窗), 过程和新建买菜差不多, 就只贴关键步骤了. 在temp分支里关窗:

file_关窗.png

然后temp和买菜分支各有一版不同的修改, 且都超前于master: temp多了"关窗"版本, 而买菜分支则多了"买鱼"版本:

sourcetree_temp.png

合并分支

现在bug修复了, 我们将temp合并到master里去.

我们要将某个源分支合并到某个目标分支上, 需要到目标分支上进行操作. 比如我们要把temp的关窗版本合并到master, 需要切换到master中, 然后右击关窗版本选择合并:

sourcetree_合并.png

sourcetree_合并_确认.png

删除分支

已经生成稳定版本了, 现在可以把temp分支删除了:

sourcetree_delete.png

sourcetree_delete_确认.png

好的, bug修复了, 我们切换回买菜分支, 继续买豆腐:

file_买豆腐.png

sourcetree_买豆腐.png

sourcetree_histories5.png

OK, 现在可以回家了. 将买菜分支合并到master.

过程不再重复, 直接看结果:

sourcetree_histories6.png

4. 版本回退

我们在master上叠加两个新版本进行测试:

sourcetree_histories7.png

如果我们想回退到天晴了这个版本, 可以右键选择重置到这次提交:

sourcetree_rollback.png

然后有三种重置方式供我们选择:

sourcetree_merge_mode.png

软合并和混合合并都不会删除开窗版本的内容, 都是变成天晴了版本提交之后开窗版本提交之前的状态. 不同的是, 软合并会将这些修改添加到已暂存区, 而混合合并则还在未暂存区.

强行合并则是丢弃整个开窗版本, 项目文件夹内容变成天晴了这个版本.

暂存文件

我们提交的时候, 只会将暂存文件的内容进行提交记录. 所以我们修改了内容之后, 要确保想要提交的内容放到已暂存文件, 否则提交的时候不会记录该修改内容.

软合并

不会删除开窗版本的内容, 只是将开窗版本的修改置为未提交状态

sourcetree_软合并.png

file_软合并.png

修改的内容被默认添加到已暂存文件区:

sourcetree_软合并_文件状态.png

混合合并

和软合并唯一不同点是, 修改的内容还在为暂存文件区. 这时如果我们点击选中未暂存文件, 则会被添加到已暂存文件, 这就和软合并一样了.

sourcetree_混合合并_文件状态.png

强行合并

丢弃开窗版本, 内容变成天晴了版本内容:

sourcetree_强行合并.png

file_强行合并.png

5. Sourcetree&Git部分名词解释

摘自https://www.cnblogs.com/fisherbook/p/11397168.html

远程仓库 (使用GitHub)

如果只需要上传代码到GitHub而不涉及后续修改迭代, 那么使用网页就够了.

1. 上传 (Push)

注册GitHub账号, 在右上角点击+号创建远程仓库 (保存在GitHub):

newRepository.png

选择public表示公开, 任何人可见; 选择private则自己可见, 也可设置成指定人可见. 一般项目都会带有一个自述文件(README.md)用于描述项目以及使用方法等.

firstCommit.png

点击Upload files以上传代码文件:

view1.png

直接拖动文件到窗口或者点击选择上传:

HelloWord.png

例子中文件内容为一个HelloWord文件夹, 然后里面有个版本记录的文本文件:

localFile.png

因为初版内容相对于原始空内容来说也是一种修改, 所以上传完成后GitHub会提示我们提交这个修改:

commit.png

然后返回项目首页, 发现这个文件夹已经上传成功了:

view2.png

2. 下载 (Pull)

点击克隆或者下载按钮, 可以直接下载压缩文件ZIP:

download.png

解压后就会看到我们的HelloWord文件以及README文件:

download2.png

3. GitHub客户端

如果要克隆远程仓库到本地, 在本地修改内容后push同步到远程仓库, 那么最佳方案就是下载GitHub客户端.

下载地址: https://desktop.github.com/

克隆远程仓库到本地

克隆远程仓库到本地. 点击克隆和下载按钮, 选择Open in Desktop进行克隆:

clone

克隆完成后就在我们指定的本地文件夹看到HelloWord文件夹和README文件了:

file_HelloWord.png

push

我们在本地修改README文件:

file_README.png

然后GitHub客户端有提示有新的修改:

desktopCommit.png

我们提交这个修改, 备注等外卖. 注意, 此次提交仅记录在本地, 如果需要同步到远程仓库, 需要进行push推送操作.

点击History版本记录, 将指定版本push到远端. 点击上传箭头:

desktopPush.png

然后我们查看网页端, HelloWord项目已经有更新了:

view3.png

pull

相反地, 我们在GitHub网页 (远程仓库) 修改内容, 然后拉取同步到本地.

pull1.png

pull2.png

pull3.png

然后打开GitHub客户端, 刷新一下:

pull4.png

然后我们看到远端有一个新版本:

pull5.png

点击Pull origin拉取之. 然后History就多了个版本记录:

pull6.png

同时本地文件也被更新了:

pull7.png

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200909A02UU700?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券