Xcode概览:保存或者恢复更改

suiling· 2014-12-12
本文来自 苹果开发者中心 ,作者 suiling

57.png

本文翻译自苹果Xcode Overview:Save and Revert Changes,敬请勘误。

Xcode会在您工作时自动保存您对源码、项目以及工作区文件所做的更改。该功能无需配置,因为Xcode可以持续跟踪您的更改,并在内存中进行保存。当您执行以下操作时,Xcode会将这些更改写入磁盘:

  • 构建和运行应用程序;

  • 向源码仓库中提交文件;

  • 关闭项目;

  • 退出Xcode;

  • 创建快照。

您也可以选择File > Save来手动保存更改。

Xcode允许你将文件和整个项目恢复至初始状态;你也可以抛弃这些更改。您可以使用源码控制管理来进行精细化的跟踪。

恢复到文件最后保存的版本

想放弃对文件的所有更改,并使之恢复到最后在磁盘上保存的版本,请选择File > Revert Document。File > Revert Document命令仅针对有编辑焦点的文件。您可以通过点击其编辑器面板或者在项目导航器中选中文件来使文件获得编辑焦点。比如,您试用了新的用户界面布局,然后决定恢复至此前的布局。或者你需要撤销一些产生了新问题的代码更改。

Revert Document命令通常将文件恢复至最后在磁盘上保存的版本。如果您喜欢每次撤销一个更改,请使用编辑菜单中的Undo命令。

增量式撤销文件更改(Undo File Changes Incrementally)

想增量地撤销文件更改,请选择Edit > Undo change。Undo命令根据你最后的操作有着非常具体的上下文环境。比如,如果您编辑了实现文件会出现Undo Typing命令;如果您在storyboard上添加了按钮对象,那么会出现Undo Add Button命令。

通过Undo命令,您可以撤销对文件的每个更改,一直到您开始编辑会话的版本状态。当您打开项目时编辑会话开启,当您关闭项目时编辑会话结束。Xcode允许您撤销在该会话中所有的编辑操作,即便是已经保存早磁盘的操作。(注意,Revert Document命令可清除所有的Undo操作历史,并且您无法撤销一个恢复操作。)

在选择了Undo命令后,您可以选择Edit > Redo来恢复最后一次撤销操作。

使用快照恢复项目范围内的更改

快照为当前项目版本和工作区的备份提供了一个简单的方法。如果由于代码更改造成了程序错误,那么您可以通过快照来恢复整个工作区,包括将所有项目文件恢复到先前的状态。

快照是项目或者工作区中所有文档文件,以及所有项目和工作区设置的存档。快照支持恢复此前的3次更改,而Revert Document和Undo则不支持该特性。

  • Xcode操作涉及对多个文档文件和潜在的项目设置的更改。这些操作包括重构代码,执行项目验证以及为现有项目添加Automatic Reference Counting等。

  • 调整工作区和项目设置。

  • 全局搜索和替代操作。

您可以通过选择File > Create Snapshot手动创建快照。

Xcode可以自动创建快照。当您第一次对项目或者工作区做大量更改时,Xcode会提示您为大量编辑操作打开自动创建快照选项。您也可以在项目或者工作区设置偏好中为大量编辑操作配置快照自动创建,选择File > Project Settings或者File > Workspace Settings。在出现的设置窗口中,选中Snapshots标签,选中"Create snapshot of project before mass-editing operations"复选框。下图展示的是没有选中自动创建快照的设置窗口。

 0123.jpg

想要在其他情况下将Xcode设置为自动创建快照,请选择Xcode > Preferences,选中Behaviors面板,同时选择Create Snapshot选项。比如下图展示的是当编译成功时创建快照。创建快照的复选框位于配置行为面板的底部。

 024.jpg

想要查看项目或者工作区的快照,请选择Window > Organizer,选中Projects来打开Projects organizer,并点击project。

 0133.jpg

通过从Projects organizer中输出快照来恢复项目或者工作区之前的状态。选择Windows > Organizer,从工作区选中一个项目,选择快照,并点击窗口底部的Export Snapshot按钮。Xcode会展示一个对话框,您可以在此检查两个版本之间的不同,左边是快照版本,右边是当前版本。

 016.jpg

想要输出快照,请点击Export,为快照选中一个目标文件夹,并再次点击Export。

您也可以在工作区窗口选择File > Restore Snapshot,从而对当前项目恢复快照版本。Xcode会展示一个预览对话框,您可以通过它检查当前版本和快照版本之间的区别。点击Restore选项,Xcode会使用快照版本代替当前项目版本。Xcode会在取代当前版本之前对其拍摄快照。

由于Xcode可以跟踪所有的项目,甚至是被删除的项目,并展示在Projects organizer中,所以您可以从快照中恢复已删除的项目版本。

使用源码控制储存和跟踪更改

使用源码控制菜单中的命令来管理项目文件源代码。源码仓库将文件的多个版本保存在磁盘上,储存每个版本的历史元数据。源码控制允许您精确地跟踪文件的更改,而不仅仅是快照。如果您有一个团队,那么源码控制也能帮助您的团队协同工作。

源码控制系统可帮你重建项目的过去的旧版本。在您每次进行了重大更改时可将文件提交到仓库中。如果您在提交的过程中引入了bug,那么您可以使用Xcode版本编辑器来比较新旧版本之间的区别,从而定位出错的源码。

当多人同时操作一个项目时,源码控制有助于阻止冲突,并在冲突出现时解决问题。请使用核心仓库保存工程的原版代码,这样源码控制系统会允许每个程序员使用本地副本,而不会损坏原始版本。通过文件检测系统,您可以确保不会有两个人同时操作相同的代码块儿。如果两个人同时更改相同的代码,那么系统将会帮你合并两个版本。

您也可以从项目的稳定版本衍生一个分支,添加新的特性,做一些其他更改,以及合并和协调这些更改到项目的稳定版本中。

Xcode支持两种流行的版本控制系统:Git和Subversion。Subversion (一般简写为 svn)是需要专门的服务器,通常在远程计算机上(当然也可以在本地安装服务器)。而Git可以单纯作为一个本地仓库,或者你可以在远程计算机上安装一个Git服务器以便于团队成员之间共享代码。

如果是单人开发项目,使用Git是最简单的方式,因为无需设置服务器。当创建一个项目时,Xcode会自动配置一个Git仓库。 

CreateGitRepo_2x.png

除了执行持续集成外,您还可以使用Xcode service托管Git仓库。

如果您的仓库托管在服务器上,可选择Source Control > Check Out来创建项目的本地工作副本。如果您使用了本地Git仓库,那你无需check out当前使用的副本,因为你的本地仓库就是您的master copy。

如果您满意对文件的更改,可选择Source Control > Commit确保这些更改已被保存到仓库中。您需要提供注释解释您提交的代码的特性。如果您的Git仓库托管在服务器上,那么提交操作会将更改添加到您的本地仓库中。推送操作可将您提交的更改添加到托管在服务器上的Git仓库中。比如当你选择Source Control > Commit时,选中"Push to remote"选项,在弹出菜单中指定远程仓库,并点击Commit Files。

您可以在项目导航器中看到文件的源码控制状态,这些状态在文件名右侧以标记(badge)形式展示。

 LocalModifiedFiles_2x.png

46.jpg

关于连接到源码仓库以及其使用方法,请参阅Source Control Management Help

对比文件版本恢复代码行

选择View > Version Editor > Show Comparison View来比较保存在仓库中的不同文件版本。基于仓库内文件所处的位置使用跳转栏来选择文件。每个跳转栏控制着内容面板中的选择。想要展示一个版本,可通过在文件层级中浏览来找到想要的版本,然后点击选中。阴影区指示版本间的更改。

VersionEditorWithChanges_2x.png

使用版本时间线基于时间顺序来选择文件版本。点击中间列底部的Timeline Viewer图标(TimeLineIcon_2x.png)来展示两个编辑面板中的时间轴。在时间轴中上下移动指针来浏览可用的版本。当发现你想用的版本时,可点击左侧或右侧的提示按钮,从而在对应的编辑器面板展示选中的版本。

您可以在版本编辑器中编辑当前的工作的文件副本。如果你想要恢复版本间的更改,您可以从旧版本中复制代码并粘贴到当前的版本中。

创建一个分支以杜绝具有风险的代码更改

当你使用一个工程一段时间后,你可能已经有了一个可靠的稳定的代码主体,您可以选择Source Control > Working Copy > New Branch来创建代码的副本,这样你可以在新分支上添加新特性或者做其他一些更改,而不会破坏现有的代码库。如果满意所做的更改,那么您可以将其合并到稳定的代码主体中。使用Source Control > Working Copy > Merge from Branch和Source Control > Working Copy > Merge into Branch来合并并协调工程不同版本间的差异。