第七章 - 源代码管理
SnapDevelop 目前支持两种类型的源代码控制系统:
- Git
- Subversion
本节介绍如何在 SnapDevelop 中使用 Git 或 Subversion 执行源代码控制。
注意:(1)如需使用 Subversion ,请确保您已安装 TortoiseSVN 1.9 或更高版本;(2)SnapDevelop 中 Git 以及 Subversion 中的源代码控制操作与业内标准的Git、Subversion 源代码控制是一致的。如果您想深入了解各个源代码控制操作的含义,您可以同时参阅网络中相关的操作文档和介绍。
配置源代码控制插件
安装 SnapDevelop 时会默认提供两个源代码控制插件,Git 和 Subversion。在 SnapDevelop IDE 中,您可以使用 Git 插件或 Subversion 插件添加解决方案(而不是单个项目)至对应的 Git 或 Subversion 源码管理。
详细的源代码管理相关的配置,请参见 源代码管理。
使用 Git 进行源代码控制
Git 源代码控制允许您将解决方案推送至本地或远程存储库。然后,您可以在自己的计算机上提交更改并在没有网络连接的情况下执行源代码控制操作。当您需要切换上下文时,可以创建一个私有的本地分支。您可以快速从一个分支切换到另一个分支,以在代码库的不同变体之间切换。然后,您可以合并或发布分支。
为解决方案创建 Git 存储库
您可以通过 Git 插件将解决方案推送至本地或远程存储库。暂不支持直接为解决方案新建远程存储库。如果需要达到这个目的,您需要首先在第三方 Git 服务器手工创建存储库,随后在 SnapDevelop 中指定推送至该存储库。
可通过如下方式为解决方案创建 Git 存储库:
(1)选择 SnapDevelop IDE 右下角的添加到源代码管理,然后点击 Git:
(2)选择菜单中工具 > Git > 创建 Git 存储库:
仅推送至本地 Git 存储库
如果选择仅将当前解决方案推送至本地 Git 存储库,在创建 Git 存储库窗口左侧选择仅限本地,输入将创建本地 Git 存储库的路径,点击创建。这会为您的解决方案创建一个新的 Git 存储库。
如果您使用默认值作为本地路径,则本地 Git 存储库路径是解决方案的目录。创建Git 存储库后,解决方案受本地 Git 源代码控制。
如果您指定不同的本地路径,则创建后会创建一个新的 Git 存储库,但该解决方案仍不受本地 Git 源代码控制。
推送至已有的远程 Git 存储库
如果选择将本地存储库连接到远程 Git 存储库以共享您的代码,在创建 Git 存储库窗口左侧选择现有远程:
输入将创建本地 Git 存储库的路径,同时指定远程存储库 URL (现有URL。如需新建存储库,请首先在 Git 服务器端完成存储库的创建),点击创建并推送。这会将您的解决方案推送至远程 Git 存储库,由远程 Git 服务器完成源代码控制。
克隆现有的 Git 存储库
选择菜单中工具 > Git > 克隆存储库,您可以将现有的 Git 存储库复制到您的本地计算机。
存储库位置 -- 您希望克隆的存储库的 URL。
Path(路径) -- 指定用于保存所克隆的存储库中的内容的本地路径。
点击克隆,确认将存储库克隆至指定路径。如果您在工具 > 选项 > 源代码管理 > Git 全局设置中输入过访问 Git服务器的用户名和密码,在进行 Git 操作时便不必重复录入。
提交、暂存和修改
在解决方案资源管理器中完成文件的编辑后,您可以在菜单中选择 工具 > Git > 提交或存储... 来提交更改后的文件到本地存储库或将更改保存至暂存区。
您可以点击全部提交后选择提交方式:
全部提交;
全部储藏(即将本地的内容作为草稿储藏起来);
全部储藏并保持暂存(即将本地的内容作为草稿储藏,同时保留当前分支中已经暂存的更改)。
您也可以点击每项更改右侧的绿色 + 图标( 暂存 ),将更改保存至暂存区。
保存后,对应的提交方式从全部提交变更为提交暂存。
无论是提交还是储藏,如果您选择修改复选框,代表当前的提交将直接用来修改上一次提交。
使用 Git 分支
Git 分支只是一个记录提交历史的参考。Git 分支允许您将功能或错误修复的更改与主分支隔离,这使得通过简单地更改当前分支来更改您正在处理的内容变得非常容易。您可以在存储库中创建多个分支并在一个分支上工作而不影响其他分支,并且您可以与团队成员共享分支,而无需将更改合并到主分支中。
由于分支是轻量级且独立的,因此在同一存储库中的分支之间很容易切换。使用分支时,Git 使用存储在提交中的历史信息在分支上重新创建文件,而不是创建源代码的多个副本。
创建一个 Git 分支
按照以下步骤创建 Git 分支:
在右下角处,点击当前分支名,再选择新建分支...。
在必填字段中输入分支名称,然后选择 基于 作为更改的基础。
(可选)选中签出分支框(SnapDevelop 会自动签出到新创建的分支),然后点击创建。
删除 Git 分支
执行以下步骤删除 Git 分支:
在 Git 更改界面,点击当前显示的分支名(如 master),展开分支下拉框。
找到计划删除的分支。确保未签出该分支,因为您无法删除当前正在使用的分支。
点击分支名称并在下拉框中选择删除。
查看分支历史记录并且创建标签
Git 通过使用存储在每个提交中的父参考信息来管理您的开发的完整历史记录。提交历史允许您确定何时进行文件更改、谁进行了更改以及不同版本的提交之间存在哪些差异。在 SnapDevelop 中,您可以创建为历史记录创建标签。要创建标签,您需要:
在菜单栏中选择工具 > SnapDevelop Git > 查看分支历史记录。
右键点击一条历史记录,选择创建标签。
输入标签名和标签信息,点击创建标签即可完成创建。
提取,拉取和推送
SnapDevelop Git 通过提取、拉取和推送操作来使本地分支与远程分支保持同步。
在 Git 更改窗口中,当前分支的右侧有三个按钮,它们分别是:提取,拉取和推送(从左到右)。您将鼠标浮动到每个图标时会显示对应的名称。
提取 --- 检查(且只是检查)是否有任何远程更改应纳入到本地更改中;
拉取 --- 将远程分支中的内容同步至本地分支;
推送 --- 将本地分支中的内容同步至远程分支。
合并或变基分支
如果您使用 Git 分支来处理不同的功能,在某个时候,如果您选择在合并了两个分支后创建新的分支,您可以通过"合并分支"来实现此目的;您可能需要将提交到某一分支上的所有修改都移至另一分支上,您可以通过变基分支来实现此目的。
执行以下步骤将某分支合并到当前分支:
在 Git 更改界面,
点击当前分支名(例如 master)的下拉框,从局部变量中选择您希望合并的分支(例如 abc),然后点击分支名旁边的下拉框,选择合并到当前分支。这时,便可以将选择的分支(例如 abc)合并至当前分支(例如 master)。
执行以下步骤将主分支变基到另一个分支:
在 Git 更改界面,
点击当前分支名(例如 master)的下拉框,从局部变量中选择目标分支后,点击分支名旁边的下拉框,选择将当前分支变基到。这时,便可以将当前的分支(例如master)变基到下拉框中的目标分支。
还原更改
使用还原可撤销一个已存在提交的所有修改。 还原命令会创建一个新的提交,用于撤销对上一个提交所做的更改。 还原不会重写存储库历史记录,因此在与他人协作时可以安全使用。
想要还原更改,请右键点击要还原的提交,然后从右键菜单中选择还原。
将分支重置为以前的状态
在当前分支的历史纪录中,打开某次提交的右键菜单,选择重置,将当前分支回滚至该提交时的状态。
如果选择重置-保留更改(--mixed),重置操作会丢弃在指定的提交之后的所有更改,但是会保留当前工作区中的内容。
如果选择重置-删除更改(--hard),重置操作会丢弃在指定的提交之后的所有更改,同时也会丢弃工作区中的修改内容。
使用 SnapDevelop SVN 进行源代码控制
SnapDevelop SVN 源代码控制系统在版本库(Repository)中维护所有文件,包括文件所更改的完整历史记录。您可以通过执行(commit)更改保存到您的版本库,展示更改内容以及更改人员,合并各种版本,更新代码到指定版本和解决冲突。
如需使用 SnapDevelop SVN,请确保您已安装 TortoiseSVN 1.9 或更高版本,因为 SnapDevelop SVN 中的主要功能都是通过 TortoiseSVN 实现。
将代码导入 Subversion 存储库
要使用 SnapDevelop SVN 进行源代码管理,您需要在 SnapDevelop IDE 的右下角选择添加到源代码管理,然后选择 SnapDevelop SVN。
然后,确认工作副本根目录。
将代码导入新的版本库
如果要将解决方案导入新的版本库,您应该:
选择新建版本库。
指定新的版本库的位置,您可以在本地磁盘或远程服务器上创建新版本库。
选择导入以将您的解决方案添加到新的版本库。
点击完成以关闭添加解决方案到 Subversion对话框。
将代码导入现有版本库
如果要将解决方案导入现有版本库,您应该:
选择现有版本库。
输入现有版本库的目标 URL。
选择导入以将您的解决方案添加到现有版本库。
检出(Checkout)解决方案
选择菜单中工具 > SnapDevelop SVN > 从 SnapDevelop SVN 获取解决方案,您可以从已有的 SVN 存储库检出(Checkout)某解决方案的工作副本。
在出现的对话框中,指定版本库URL、项目名称和位置(Check out 目录),点击确认。
如果您是第一次连接版本库 URL 所在的 Subversion 服务器,您需要输入用户名和密码。
版本库 URL 中的文件被检出至指定位置后,您可以从弹出的窗口中选择需要打开的解决方案,点击确认后打开。
提交对版本库的更改
从版本库 URL中检出工作副本后,您可以在解决方案资源管理器中编辑和修改项目文件。完成文件修改后,您可以将更改提交到 SVN 版本库,以便其他团队成员可以看到您的更改并将更改更新到他们自己的本地工作副本。
注意:建议您始终提交整个项目或解决方案文件夹,而不是单个文件或文件夹。如果您提交单个文件或文件夹,其他用户可能无法正确获取更新版本。
要通过提交保存更改,您只需选择修改后的项目或解决方案,然后从右键单击上下文菜单中选择执行。
SnapDevelop SVN 使用 TortoiseSVN 执行文件的提交。在提交对话框中,您可以看到已更改的文件,例如版本化、非版本化、添加和删除的文件,默认情况下选择更改的文件。如果您不想提交更改的文件,只需取消勾选该文件即可。如果要提交非版本化文件,可以勾选该文件。您可以通过单击显示项目列表正上方的链接来快速选中或取消选中文件。您可以选择输入一条消息来描述您所做的更改,以便您的团队成员知道发生了什么变动。
更新您的本地工作副本
在处理涉及多个开发人员的项目时,您应该定期确保您的团队成员所做的更改更新到您的本地工作副本中。
注意:建议您始终更新整个项目或解决方案文件夹,而不是单个文件或文件夹。如果您更新单个文件或文件夹,您可能无法正确获取更新版本。
SnapDevelop 中提供了两个更新选项:更新到最新版本和更新到非最新版本。
更新到最新版本
要使用远程版本库中的最新更改更新本地工作副本,您只需选择所需的项目、解决方案或目录,然后从右键菜单中选择更新。
更新到非最新版本
如果要更新本地工作副本至某个特定版本,您需要:
选择所需的项目、解决方案或目录。
从右键单击上下文菜单中选择 Subversion,然后选择更新至版本…。
选择指定版本
还原更改
如果您更改了解决方案中的文件,随后又觉得更改不合适,您可以在菜单中选择 工具 > Subversion > 复原修改...,或者点击解决方案右键菜单中的复原修改来撤消更改。请注意,只有当更改未提交到 Subversion 版本库时,您才能撤销更改。
刷新状态
您将解决方案加载到 SnapDevelop IDE 后,可能会在当前的开发环境、SnapDevelop IDE 之外的程序中对其进行更改。例如,通过使用记事本修改解决方案中的某个 JSON 文件。SnapDevelop IDE 不会自动检测到此类更改。因此,您需要通过在解决方案资源管理器中的菜单栏上选择刷新状态来将最新的解决方案文件重新加载到 IDE 中。
显示更改列表
修改文件后,您可以通过选择修改后的文件、文件夹、项目或解决方案,从右键菜单中选择显示修改来查看变更。
显示更改日志
对于您所做和提交的每一个更改,您都应该提供一条日志消息,以便您以后可以弄清楚您所做的更改以及您进行此更改的原因。
要查看更改日志,您需要选择特定的文件、文件夹或项目(不含解决方案),然后在菜单中选择 工具 > Subversion > 显示日志…。
Subversion 提供的显示日志功能调用的是 TortoiseSVN 中的日志。
指定Subversion 属性
点击文件、文件夹、项目或解决方案右键菜单中的 Subversion > 属性...,您可以为当前的解决方案读取和设置 Subversion 属性。
Subversion 提供的属性功能调用的是 TortoiseSVN 中的属性配置窗口,所以其中的属性相关功能,请参考 TortoiseSVN 用户文档。
合并分支
点击解决方案右键菜单中的 Subversion > 合并...,Subversion 将调用 TortoiseSVN 中国的合并功能,为您进行指定分支的合并操作。
解决冲突
当多个开发人员更改同一文件中的同一行代码并将更改提交到共享存储库时,可能会发生冲突。这时您将看到冲突文件的名称和警告消息。
在解决方案资源管理器中,冲突的文件将标有一个小红点。如果您想成功同步代码,就必须手动解决冲突。
要解决冲突,您需要:
- 选择冲突的文件。
- 编辑文本冲突。
锁定
为了避免冲突,建议您锁定文件,锁定后只有您可以提交对该文件的更改,其他团队成员的提交将被拒绝,直到您释放锁定为止。源代码库中锁定的文件是无法被修改的。
获取锁
要锁定文件,您只需在工作副本中选择文件,然后选择 Subversion > 加锁...。
然后,您将看到 TortoiseSVN 锁定文件对话框,您可以在其中选择输入一条消息,以便您的团队成员可以看到您锁定文件的原因。如果您想从其他人那里取得锁,您可以选中偷取此锁定框。
解锁
要解锁,您首先应该知道哪个文件被锁定。锁定的文件会显示在执行对话框中并会被自动勾选。如果继续执行执行,即使文件尚未修改,所选文件上的锁定也会被删除。如果您不想解锁特定文件,可以取消选中它们。如果要对已修改的文件保持锁定,则必须在提交更改之前选中保持锁定框。
您可以通过在工作副本中选择锁定的文件,然后选择 Subversion > 解锁来手动解除锁定。
使用追溯跟踪更改
追溯(Blame)用来追溯特定文件、文件夹或项目(不能选择解决方案)更改信息。您可以选择具体的文件、文件夹或项目(不含解决方案),然后在右键菜单中选择 Subversion > 追溯...,调用 TortoiseSVN 的追溯功能。
显示磁盘浏览器和存储库浏览器
存储库浏览器允许您查看存储库的结构和状态并直接在存储库上工作,而无需检出工作副本。
要在本地磁盘中显示存储库,请选择文件、文件夹、项目或解决方案,然后在右键菜单中选择 Subversion > 磁盘浏览器。
要在存储库浏览器中显示存储库,您可以选择具体的文件、文件夹或项目(不含解决方案),然后在右键菜单中选择 Subversion > 版本库浏览器。
从 Subversion 中排除
如果不想将某些编辑过的文件、文件夹或者项目纳入 Subversion 的管理,您可以选择具体的文件、文件夹或项目(不含解决方案),然后在右键菜单中选择 Subversion > 从 Subversion 中排除。排除后,解决方案资源管理器中文件前面的小(黄色或绿色)点将消失。后续您可以通过选择文件然后从右键菜单中选择添加到 Subversion 来将文件添加到 Subversion。