关于
各位好,这里是 China's Prices Project 项目的知乎专栏。关于 CPP 项目,您可以在这篇文章里了解到更多的信息。若您对这个项目感兴趣,我们非常欢迎您与我们交流您的想法与见解。在一个团队的成员同时为一个项目进行开发工作时,为了对整个项目涉及到的代码进行统一的管理,方便文件存取、协同开发、状态回滚、历史版本记录等操作的进行,版本控制系统(Version Control System) 应运而生,诸如 VSS、CVS、SVN、Git 等都是 VCS 的典型代表。而当下最为流行并得到广泛应用的版本控制系统,正是 Git 。
“Working with Git”系列文章将向各位粗浅介绍 Git 与 GitHub 的有关概念与实际应用。文章将以介绍基于 Git 的版本管理思想与 GitHub 的有关功能为主,重点不会放在 Git 的命令行代码上。因个人的水平能力与经验都非常有限,若有错漏还望批评指正。
Git 与 GitHub 中的基本概念
前面提到,Git 是一个免费、开源、分布式的对项目代码的提供版本管理功能的软件,而 GitHub 则是一个基于 Git 提供代码托管服务的网络平台。
Git 的分布式体现在其“去中心化”的特点。以往,SVN 之类的版本控制系统存在一个“中心服务器”,其使用者需要从服务器“取回”一个代码的最新版本,在完成自己的修改后再“提交”到中心服务器上让自己的代码成为新的版本,这种结构有一些明显的缺点:一是要求使用者在获取代码与提交更改时必须连接到服务器;二是当使用者人数过多时服务器压力会明显变大,在处理冲突时(例如几位使用者对一段代码的同一个地方做了不同的更改)也会出现很大困难。
为解决这些问题,Git 中引入了新的代码管理机制。我们先来了解 Git 中的基本概念与操作:
Repository (仓库): 一个项目的所有代码存放在同一个仓库 (Repo) 中。仓库有本地仓库 (Local) 与远程仓库 (Remote) 的区别。如果你使用 GitHub ,那么你的远程仓库便托管在 GitHub 上。Commit (提交): 当你在本地库完成了一些修改后,将所有修改内容提交到缓存区。你可以为每个 Commit 加上一个标题并写明这次修改的主要内容。Push (推送): 当本地仓库缓冲区有未同步的 Commit 时,即本地仓库代码版本新于远程仓库,Push可以将这些 Commit 推送到远程仓库。Pull/Fetch (拉取): 当远程仓库代码版本新于本地仓库时,Pull/Fetch 操作可以使本地仓库更新到远程仓库的版本。两者间的区别我们会在下一篇文章中介绍。Sync (同步): 同步远程仓库版本与本地仓库版本。Fork/Clone/Publish (复制/克隆/发布): Fork 操作将一个他人的远程仓库复制到自己的远程仓库中; Clone 操作将一个他人的远程仓库复制到自己的本地仓库中;Publish 操作将自己的本地仓库发布到 GitHub 等代码托管平台上,即在托管平台上建立起一个对应的远程仓库。
通过这些概念,我们不难发现 Git 中不存在类似 SVN 之类的“中心服务器”,每位用户都可以通过 Fork/Clone 操作获得一个可以自行更改的代码仓库,这在一定程度上解决了集中式代码管理带来的问题。然而真正凸显 Git 强大功能的,是 Git 中“工作流”的有关概念。
我们将在下篇文章中具体讨论工作流的有关内容。
成稿匆忙,且当抛砖引玉,多有感谢~XD
=========================
更多项目介绍,请关注我们的项目专栏:China's Prices Project - 知乎专栏
项目联系方式:
- 项目邮箱:zhangguocpp@163.com
- 知乎:@iGuo@Suri(项目负责人) @林行健@Dementia (技术负责人)@张土不 (财务负责人) @好大一棵树(运维负责人)
文章中图片来源于:Getting Git Right - Atlassian Git Tutorial
在 Creative Commons Attribution 2.5 Australia License 下使用。
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议进行许可。