git&gitbub

Git是诞生于2005年的一个开源分布式版本控制系统,最初是Linus Torvalds(Linux之父) 为了帮助管理Linux内核开发而开发的一个版本控制软件。Git与常用的版本控制工具Subversion等不同,它采用了分布式版本控制的方式,在没有中央服务器支持的环境下也能够实施版本控制。
对于有使用Subversion(以下简称为SVN)经验的人来说,Git和SVN一样摒弃了基于锁定模式的版本控制方案(早期的CVS和VSS使用的就是锁定模式)采用了合并模式,而二者的区别在于: 1. Git是分布式的,SVN是集中式的,SVN需要中央服务器才能工作。 2. Git把内容按元数据方式存储,而SVN是按文件,即把文件的元信息隐藏在一个.svn文件夹里。 3. Git分支和SVN的分支不同。 4. Git没有一个全局版本号而SVN有。 5. Git的内容完整性要优于SVN,Git的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性,确保在遇到磁盘故障和网络问题时降低对版本库的破坏。
安装Git
可以在Git官方网站找到适合自己系统的Git下载链接并进行安装,安装成功后可以在终端中键入下面的命令检查自己的Git版本。
git --version
如果之前完全没有接触过Git,可以先阅读《git - 简易指南》来对Git有一个大致的了解。
本地实施版本控制
可以使用下面的命令将目录创建为Git仓库。
git init
当你完成了上述操作后,本地目录就变成了下面的样子,左边是你正在操作的工作目录,而右边是你的本地仓库,中间是工作目录和本地仓库之间的一个暂存区(也称为缓存区)。

通过git add可以将文件添加到暂存区。
git add <file>
可以用下面的方式将暂存区的指定文件恢复到工作区。
git checkout -- <file>
通过下面的命令可以将暂存区的内容纳入本地仓库。
git commit -m '本次提交的说明'
可以使用下面的命令查看文件状态和进行版本比较。
git status -s
git diff
可以通过git log查看提交日志。
git log
git log --graph --pretty=oneline --abbrev-commit
如果要回到历史版本,可以使用下面的命令。
git reset --hard <commit-id>
git reset --hard HEAD^
其他的一些命令可以参考阮一峰老师的《常用Git命令清单》或者是码云上的《Git大全》。
Git服务器概述
对于Git来说不像SVN那样一定需要一个中心服务器,刚才我们的操作都是在本地执行的,如果你想通过Git分享你的代码或者与其他人协作,那么就需要服务器的支持。Github为Git提供了远程仓库,它是一个基于Git的代码托管平台,企业用户(付费用户)可以创建仓库,普通用户只能创建公开仓库(代码是可以是他人可见的)。Github是在2008年4月创办的,它上面代码库惊人的增长速度已经证明了它是非常成功的,在2018年6月,微软以75亿美元的天价收购了Github。国内也有类似的代码托管平台,最有名的当属码云和CODING,目前码云和CODING对注册用户都提供了受限的使用私有仓库的功能,同时还提供了对Pull Request的支持(后面会讲到),而且目前提供代码托管服务的平台都集成了“缺陷管理”、“WebHook”等一系列的功能,让我们能做的事情不仅仅是版本控制。当然,如果公司需要也可以搭建自己的Git服务器,具体的方式我们就不在这里进行介绍了,有兴趣的可以自行了解。
[图片上传中...(image.png-3072e4-1542052135713-0)]

我们可以在码云或者CODING上注册账号,也可以使用第三方登录(github账号、微信账号、新浪微博账号、CSDN账号等)的方式。登录成功后就可以创建项目,创建项目几乎是“傻瓜式”的,但是有几个值得注意的地方。
-
添加项目成员。创建项目后,可以在项目的“设置”或“管理”中找到“成员管理”功能,这样就可以将其他开发者设置为项目团队的成员,项目成员通常分为“所有者”、“管理者”、“普通成员”和“受限成员”几种角色。
-
设置公钥实现免密操作。在项目的“设置”或“管理”中我们还可以找到“部署公钥管理”的选项,通过添加部署公钥,可以通过SSH(安全远程连接)的形式访问服务器而不用每次输入用户名和口令。可以使用ssh-keygen命令来创建密钥对。
ssh-keygen -t rsa -C "your_email@example.com"
在 ~/.ssh/id_rsa.pub 里面的内容复制到coding上面的个人设置公钥中
-
免密码push和pull(使用https方式)
1、cd ~
2、vi .git-credentials
在里面写入 https://{username}:{password}@coding.net
3、git config --global credential.helper store -
windows系统中设置免密码
打开gitbash
然后和上面的操作一模一样,完成后只有第一次需要输入密码
使用Git进行开发
克隆服务器上的代码到本地机器。
git clone <url>
在自己的分支上进行开发。
git branch <branch-name>
git checkout <branch-name>
或者
git checkout -b <branch-name>
接下来可以先在本地实施版本控制(操作的方式与前面相同不再赘述),然后再将自己的分支Push到服务器。
git push origin <branch-name>
最后,当工作完成时,可以发起一个Pull Request,请求将代码合并到master分支。
分支策略的模式
上面讲解的方式,其实是一种称为github-flow的分支策略模式,这种模式的操作步骤包括:
- master的内容都是可以进行发布的内容。
- 开发时应该以master为基础建立新分支。
- 分支先在本地实施版本控制,然后以同名分支定期向服务器进行Push。
- 开发结束后向master发送Pull Request。
- Pull Request通过代码审查之后合并到master,并从master向正式环境发布。
在使用github-flow时的注意事项有以下三点:
- master是用于发布的,不能直接在master上进行修改。
- 开始日常开发工作时要首先建立分支。
- 工作完成后向master发送Pull Request。