在 PyCharm 里使用版本控制

软件开发是在一定周期内完成特定的任务,在这期间要创建许多不同类型的文件,也需要记录和跟踪项目中各文件内容的修改变化,为了提高效率,我们希望这类操作是自动进行的,这时就需要版本控制工具。本节的主要内容是介绍PyCharm 支持哪些版本控制工具,都有哪些常用功能。

1. 版本控制工具介绍

1.1 版本控制工具分类

集中式版本控制工具

SVN 是该类型代表性工具,这类版本控制工具允许程序员通过网络来获取版本库中的代码,并且在修改之后提交回来。客户端可以有无数个,但是版本库所在的服务端也还是只有一个。 对服务器性能要求高,必须联网,不适合开源开发。

每一个程序员在本地有一个工作目录树,其内容是该版本库中最新的代码。当他们在工作目录树中完成代码修改之后,就把改动提交会该代码库。在本地工作目录树中只会看到代码的最新版本,如果想要查询历史修改记录,就必须与服务器上的版本库打交道。

分布式版本控制工具:

Git 是代表性工具,分布式版本控制系统通常也有一台充当“中央服务器”的电脑,但这个服务器的作用仅仅是用来方便“交换”大家的修改。每个开发人员从“中央服务器” chect out代码后会在自己的机器上克隆一个自己的版本库,每一次提取操作,实际上是对代码仓库的完整备份。向版本库提交代码无需链接远程版本库,所有的历史记录都存储在本地版本库中。程序员之间传递同步各自的修改是通过 push 操作直接把修改上传到主版本库。

分布式的版本控制系统在管理项目时存放的不是项目版本与版本之间的差异,它存的是索引( 所需磁盘空间很少,所以每个客户端都可以放下整个项目的历史记录),分布式的版本控制系统出现之后, 解决了集中式版本控制系统的缺陷,断网的情况下也可以进行开发( 因为版本控制是在本地进行的)。

1.2 PyCharm 支持的版本控制工具

PyCharm 支持 以下的版本控制工具 Git、Mercurial、Perforce 与 Subversion

  1. Git 是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。作为一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。适合分布式开发;速度快、灵活,分支之间可以任意切换;离线工作,不影响本地代码编写,等有网络连接以后可以再上传代码,并且在本地可以根据不同的需要,在本地新建自己的分支。

图片描述

Tips: Git 是当下最为流行的版本控制工具,将在下一小节具体介绍相关功能。

  1. Mercurial 也是一种分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。其是基于 GNU General Public License (GPL) 授权的开源项目。因为它是用高级语言编写的,所以你可以用 Python 函数编写Mercurial 扩展。

在PyCharm 里使用Mercurial 要提前安装, 目前只支持 Python 2.7 版本,如果你当前是3.0 环境,需要事先准备2.7 虚拟环境。更多细节参考
图片描述

  1. SVN 是 Subversion 的简称,是一个开放源代码的版本控制系统。属于集中式的版本管理系统。用于多个人共同开发同一个项目,共用资源的目的。

图片描述

在PyCharm 里使用 SVN , 需要 Subversion 插件是生效的。除此以外,PyCharm 目前支持与 Subversion 1.7 及更晚的集成,要求下载并安装命令行 svn 客户端。安装细节参考
图片描述

  1. Perforce 简称P4, 是一款非常优秀的商业化版本管理工具,真正的客户端/服务器系统。许多动画与游戏制作公司会选择用它,因为需要保存大量的3D模型 、纹理等元数据,其它版本控制工具在处理二进制文件相比 Perforce 要弱。

图片描述

Perforce 只有在 PyCharm 的专业版里才被支持,另外需要提前在本地安装 Perforce 客户端,并使用 Perforce 仓库创建帐户。安装参考官网

2. 启用版本控制

  1. 启动版本控制,主菜单 VCS -> Enable Version Control Integration, 选择版本控制工具。
    图片描述

  2. 将目录与版本控制系统关联

PyCharm 支持基于目录的版本控制模型,这意味着每个项目目录都可以与不同的版本控制系统关联,但通常不会在一个项目里用不同的版本工具。

主菜单 PyCharm/File -> Preference/Settings -> Version Control, 配置目录。项目根目录会自动被填加, 点击 + 按钮,会弹出 Add VCS Directory Mapping 填加新的目录与选择版本控制工具

图片描述

3. 与远程存储库同步

3.1 建立远程存储库

以在GitHub 上建立远程存储库为例, 打开要共享的项目,VCS -> Import into Version Control -> Share Project on GitHub。 系统会要求输入GitHub 帐户名与密码,自动建立与 GitHub 的连接后,需要指定远程存储库名称、远程 的名称及描述说明等等。
图片描述
选择要提交的文件,点击 Add, 完成第一次提交。远程存储库建立成功后,团队成员就可以共享项目了。
图片描述

3.2 Fetch Change

主菜单: VCS -> Git -> Fetch 。从远程获取更改时,自上次与远程存储库同步以来所做的所有新数据将下载到本地副本中。此新数据未集成到本地文件中,更改不会应用于当前代码。提取的更改存储为远程分支,我们能够在将更改与文件合并之前查看它们,然后再把改变合并到当前文件根据需要。具体演示请看下一节 Git 应用。

在这解释一下分支的概念,在代码开发中,我们为了方便版本管理和开发、bug修复等工作,将代码分开不同的版本,开发人员使用不同的版本开发时,看到的文件可以完全不冲突,各自开发各自的功能。叫做不同的代码分支。查看当前项目分支: VCS -> Git -> Branches 或者点击 IDE 底部状态栏右下角处。

图片描述

3.3 Pull Change

主菜单: VCS -> Git -> Pull。从远程存储库提取更改是获取更改并随后将更改应用于当前分支的方式。提取时,您不仅下载新数据,还可以将其集成到项目的本地工作副本中。Pull 将更新本地文件,而 Fetch 提取不会影响本地开发环境,因此 Fetch 是获取远程存储库所有更新的相对安全的方法, 在实际工作中,我们更推荐用 Fetch + Merge。具体演示请看下一节Git 应用。

3.4 Update Project

主菜单: VCS -> Update Project。如果每次与远程存储库同步时都希望从所有分支获取更改,这时用Update Project。执行更新操作时,PyCharm 会从所有项目根和分支获取更改,并将跟踪的远程分支合并到本地工作副本(等同于 Pull)。

点击菜单,显示下面弹出窗口, 选择更新策略。
图片描述

4. 在版本工具下管理文件

  1. 主菜单:View -> Tool Windows -> Commit, 打开 Local Changes. 可以选择文件增加/排除到版本库。
    图片描述

  2. 根据 Project 窗口中文件颜色,可知道文件的状态。
    图片描述

  3. 可以在编辑器中修改文件时跟踪对文件的更改。所有更改都用更改标记突出显示在修改行旁边的侧边栏处。( 前提是文件已经提交过远程存储库,然后在本地又更新了文件)
    图片描述
    Tips: 当文件被提交后,标记也会自动消失。

  4. 如果删除受版本控制的文件,则在提交更改之前,该文件仍然存在于存储库中。已删除的文件将放置在活动更改列表中,并突出显示为灰色,直到再次提交,才会真正删除。(在"项目"工具窗口中选择一个文件,然后按⌦,或选择从上下文菜单中删除, 同样需要文件提交过远程库 )。
    图片描述

  5. 提供多种文件比较方式

  • 将修改后的文件与存储库版本进行比较
  • 将文件的当前修订版与同一分支中的选定修订版本进行比较
  • 将文件的当前修订版与其他分支进行比较

图片描述

5. 查看文件更改历史

PyCharm 提供查看文件更改历史功能, 可以点击主工具栏上 Show History 按钮或者在 Project 工具窗口中的上下文菜单中选择 Show History,文件的更改历史记录将显示在版本控制工具窗口 Git 的专用历史记录选项卡。(View -> Tool Windows -> Git)
图片描述

6. 搁置和不搁置更改 (Shelve and Unshelve)

Shelve 是版本控制中的一个概念,就是先把更改临时挂起,放在一边稍后再处理。在实际工作中,比如有时候功能只写了一半,但又有了紧急任务,就可以用 Shelve 把写了一半的功能挂起,过后再通过Unshelve 恢复代码继续开发。

Shelve Change

  1. 在 Local Change 视图中,右键单击要放入 Shelve 的文件或更改列表,然后从上下文菜单中选择 Shelve Change。
  2. 在 Shelve Changes 对话框中,查看已修改文件的列表。在 Commit Message 字段中,输入要创建的 Shelve 的名称,然后单击 Shelve Changes 按钮。然后在 Local Change 视图中会出现
    Shelf Tab。
    图片描述
    我们还可以静默搁置更改(Shelve Silently),而不显示 Shelve 对话框。单击工具栏上的 Shelve Silently 图标, 相应的 Changelist 移到 Shelf Tab

图片描述

Tips: 当提交成功后,可看一下源代码恢复到没有更改前的状态。

Unshelve Change
Unshelve Change 是 Shelve 的逆过程, 可以点击工具栏的按钮,也可以通过上下文菜单。Unshelve 后, 在Local Changes 又可以看到对应的 Changelist。查看源代码更改过的代码又恢复过来了。
图片描述

7. VCS 与 Bug 管理工具集成

在PyCharm,可以将提交消息与 Bug 管理工具连接,从 VCS 日志中直接跳到 Bug 管理工具中。主菜单:Preference/Settings -> Version Control -> Issue Navigation

图片描述
在提交时, 在提交信息处按照定义的模板写 BUG ID
图片描述
点击 Commit 提交成功后,在版本控制工具 Git 窗口,可以看到提交信息被系统识别,变为一个超链接,通过点击它直接跳转到 bug 管理工具。
图片描述

8. 小结

本节主要介绍了 PyCharm 对版本工具的支持,所有截图都是基于 Git, 如果选择其它工具作为版本控制工具,可能略有不同。本节涉及的内容比较多,需要不断在实践中才能真正理解,另外里面涉及到一些概念,建议大家看一下Git 官方文档,也将在下一节详细介绍 Git 在 PyCharm 中的应用。
图片描述