本书处于 开放评论 状态。希望获得来自读者的更多反馈以完善内容。阅读时,如果遇到一些文字内容需要求助,可以采用如下方式与我互动: 先用鼠标选择文本 在释放鼠标左键时将会有 annotate 弹窗,点击弹窗上的 ,如果已经注册的话,可以直接留言评论,否则先注册再留言。 你也可以点击页面右上角的 符号,可以看到其他人的留言评论。

6.4 git软件版本控制与github开源软件托管

随着软件开发技术的日趋多样与复杂,开放源代码软件(open source software,OSS)日趋流行。开源软件通常是指 基于各种开放源代码许可证(如GPL、BSD等)而发布的软件。 与商业软件相比,开源软件的一个突出特点是,用户不仅可免费获得程序的源代码,而且还可以自由复制、修改和分发程序源代码。开放源代码软件的最明显的好处是可以节省软件使用者的“总体使用成本” (TCO),因为使用者无须支付使用许可费(License fee),除具有使用成本方面的优势之外,开源软件的特点还包括:使用的非依赖性;使用的安全性与隐私保护;源程序的可修改性;崇尚开放性的标准;可自由实施基于OSS的开发。 正是基于上述特点,近年来,开源软件在世界范围得到了广泛应用。全球已有超过25个国家的70多个各级政府提案声明和研究推动自由软件。目前,欧盟对于开源软件的支持与推广最为显著,从中央政府的信息应用到政府电子化的采购标准,OSS不是被强烈建议政府采购时宜优先采用,就是由政府部门明令规定只能采用OSS,倡导风气全球居冠。

开源软件的流行带来了一个很重要的问题,就是如何实现软件代码的版本控制及软件代码的共享,为了解决前一问题,Linux的创始人Linus在2007年开发了 git 这一免费的分布式版本控制软件(下载地址:https://www.git-scm.com/download/),目前已成为全球软件开发者,尤其是互联网企业进行软件版本控制的首选工具。对于后一问题,Chris Wanstrath开发了gitHub,用于面向开源及私有软件项目的托管网站,因为只支持 git 作为唯一的版本库格式进行托管,故名gitHub。发展迄今,已成为全球最大的社交编程及代码托管网站(登录网址:https://github.com/),根据github官网发布的数据,GitHub有170万名软件开发忠实用户,平均每天更新8万个并新建7千个软件库。GitHub网站已成为全球程序员的“维基百科全书”。2018年10月26日,微软以75亿美元收购GitHub,将其纳入麾下。

6.4.1 基于git的软件版本控制

Git 是一套版本控制软件,能够帮助软件开发者(软件使用者)跟踪计算机程序和文件在任何时间的更改。同时,它也允许个人在程序、代码和文件操作上与其他同事写作。

1. git 进行版本控制的基本原理

Git 的工作流程如图 6.10 所示:

Git的软件版本控制工作流程

图 6.10: Git的软件版本控制工作流程

上图中的一些关键名词说明如下:

  • Workspace:工作区
  • Index / Stage:暂存区
  • Repository:仓库区(或本地仓库)
  • Remote:远程仓库

工作区

程序员进行开发改动的地方,是你当前看到的,也是最新的。

平常我们开发就是拷贝远程仓库中的一个分支,基于该分支进行开发。在开发过程中就是对工作区的操作。

暂存区

.git目录下的index文件, 暂存区会记录git add添加文件的相关信息(文件名、大小、timestamp…),不保存文件实体, 通过id指向每个文件实体。可以使用git status查看暂存区的状态。暂存区标记了你当前工作区中,哪些内容是被git管理的。

当你完成某个需求或功能后需要提交到远程仓库,那么第一步就是通过git add先提交到暂存区,被git管理。

本地仓库

保存了对象被提交 过的各个版本,比起工作区和暂存区的内容,它要更旧一些。

git commit后同步index的目录树到本地仓库,方便从下一步通过git push同步本地仓库与远程仓库的同步。

远程仓库

远程仓库的内容可能被分布在多个地点的处于协作关系的本地仓库修改,因此它可能与本地仓库同步,也可能不同步,但是它的内容是最旧的。

小结

  • 任何对象都是在工作区中诞生和被修改;

  • 任何修改都是从进入index区才开始被版本控制;

  • 只有把修改提交到本地仓库,该修改才能在仓库中留下痕迹;

  • 与协作者分享本地的修改,可以把它们push到远程仓库来共享。

    2. git 的安装和基本使用

    2.1 git的下载安装

    登陆 https://git-scm.com/download/win 根据个人电脑操作系统(windows系统的话,选择32位或者64位)下载并自行安装。以windows系统为例,在桌面点击右键,如果出现下图这两个选项代表安装成功。

Git安装成功示意

图 6.11: Git安装成功示意

2.2 git的初始化

点击右键选择 Git Bash Here , 在CMD 中输入以下命令:

# 配置个人用户名与邮箱,便于识别每次提交修改的当事人
git  config --global  user.name  '你的用户名';
git  config --global  user.email  '你的邮箱';

# 上述指令设置成功后,输入下面这条命令看是否设置成功
git config --list

2.3 创建本地仓库

在本地硬盘新建一个文件夹,用作本地仓库,打开这个文件夹,在目录下右键,选择 Git Bash HereCMD 中输入以下命令:

# 将本地文件夹设置为git 管理的本地仓库
git init

输入上述命令后,文件夹中会出现一个.git的文件夹,该文件夹属性为隐藏。将要进行版本控制的项目文件复制到新建文件夹中。

2.4 将文件提交到缓冲区

输入以下命令将所有文件提交到缓冲区,注意:add 与 . 之间有一个空格,代表目录下的所有文件,如果只提交一个文件,也可以输入这个文件的文件名。

# 将文件提交到缓冲区
git add .

# 查看当前状态
git status

如果文件提交缓冲区正常,输入 git status 可以看到输出结果满眼漂绿,说明正常。

2.5 将缓冲区文件提交到本地仓库

输入以下命令

# 将缓冲区文件提交到本地仓库,备注最好是英文,如first bookdown file
git commit -m "备注"

如果实施版本控制的文件名是中文,在使用 git status 命令查看当前状态时会乱码,如果要使它显示为中文,在命令行执行 git config --global core.quotepath false,再使用git status 即可正常查看。

3. 将项目托管至GitHub

3.1 登陆github创建远端仓库

登陆 https://github.com/ 用已注册的GitHub账号与密码登入,点击右上角头像,选择your profile,如图 6.12 示意;然后创建项目(repository),如图 6.13 示意:

登陆GitHub账号profile

图 6.12: 登陆GitHub账号profile

GitHub远端仓库创建过程GitHub远端仓库创建过程

图 6.13: GitHub远端仓库创建过程

在下图 6.14 中,记住对应的长串地址,后面在本地仓库与远端仓库同步时将用到

GitHub远端仓库地址

图 6.14: GitHub远端仓库地址

3.2 本地仓库与github远端仓库连接

回到之前的本地仓库文件夹,执行以下命令

# 将github远端仓库与本地仓库建立连接,用之前记录的远端仓库地址更新以下命令后部分地址
git remote add origin https://github.com/....

# 如果是第一次将本地仓库文件推送到github远端仓库,请执行以下命令
git push -u origin master

# 如果不是第一次,是上传更新后的代码,请执行以下命令
git push origin master

完成上述操作后,登录GitHub个人账户,可以看到项目文件和提交记录。