1. Git 托管平台简述
在前面的文章《Git的分支策略及工作流》中提到的场景是单人单机开发模式下Git的应用。下面扩展场景为单人(多机)多地开发:比如在家和在公司同时开发项目,这是就需要用到远程仓库来统一管理代码。我们说的远程仓库通常是通过第三方的Git代码托管平台来实现的。
Git代码托管平台有很多,比较流行的有三个:GitHub、Bitbucket和GitLab,Gitee(码云)
GitHub: 使用人数最多,可以免费托管,很多开源项目,如果创建私人仓库需要付费。
Bitbucket: 使用人数仅次于GitHub,免费的私有仓库和分支持有的权限控制。
GitLab:一般用于大企业项目,通过安装到企业内部服务器,实现项目的内部自治。
Gitee(码云):国内最大的托管平台,速度快。
Bitbucket 托管平台可以查看相关文章:
SourceTree 安装配置及关联Git和Bitbucket
Gitee(码云)官网:Gitee - 基于 Git 的代码托管和研发协作平台
^v2^article_score_rank,143^v4^register&utm_term=Gitee&spm=1018.2226.3001.4187
GitLab 和 Gitee 托管平台安装配置将在后续文章中讲述,本文主要关注GitHub。
2. GitHub 使用
Git 并不像 SVN 那样有个中心服务器。目前我们使用到的 Git 命令都是在本地执行,如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员能够连接的服务器上。github是一个基于git的代码托管平台,付费用户可以建私人仓库,我们一般的免费用户只能使用公共仓库,也就是代码要公开。GitHub是当今世界上最大的代码托管平台。
GitHub 使用一般步骤:
1. 注册账户
2. 创建远程仓库
3. 本地代码推送到远程仓库
2.1 注册账户
访问官网:https://github.com , 依次如下:
填写完注册信息后,点击下面的“Create account” 按钮创建账户:
你的邮箱回收到一个验证码,输入验证码即可访问GitHub。
点击该页面下面的“Skip...” 跳过右边的文件,可以直接进入。
来到这个界面,账户注册成功。
2. 2 创建远程仓库
选择右上角的“+”号,点击“New repository” 选项创建仓库:
进入远程仓库创建页面:
简要说明:
Repository name: 项目名称,尽量与实际项目同名,方便以后管理。
Description: 对该项目的描述
Public/Private: 默认是Public免费开源的,如果你不想公开你的项目,选择Private,但需要付费。
Add a README file: 如果勾选,则创建仓库的同时会创建README文件。
Add .gitignore: 如果勾选,则创建仓库时会生成ignore文件,ignore文件可以配置哪些文件应该被git忽略掉,不需要管理。
Choose a license: 如果勾选,则可以说明一个证书,比如写上该项目可以被使用但不能商业的声明信息。
本次实践采用上面截图的选择,点击“Create repository” 创建一个空的仓库:
远程仓库创建成功,上面HTTPS的地址就是我们创建的远程仓库的地址,以后我们就可以通过访问这个地址来访问这个远程仓库。(该页面中也有提供接下来的一些推送代码的步骤命令)
因为我本机已经存在本地仓库了,所以直接选择推送方式就可以。
2.3. 本地代码推送到远程仓库
这里直接copy上面的命令,到本地执行推送: git remote add origin https://github.com/***/GitLearnDemo.git git branch -M main git push -u origin main
但是我本地的分支叫 “master”,命令“git branch -M main” 是将当前分支改名为“main”后,再推送,我不想改分支名称,所以直接执行下面两个命令:
git remote add origin https://github.com/***/GitLearnDemo.git
git push -u origin master
说明:origin其实是URL(https://github.com/***/GitLearnDemo.git)的别名,即时指远程仓库。
依次执行上两个命令:
发现执行“git push -u origin master”命令时报错。
首先造成这个错误很可能时网络不稳定,连接超时导致的。如果再次尝试后依然报错,可以执行下面的命令,解除ssl验证。
解除办法:打开git bash执行下面命令:
git config --global http.sslVerify "false"
解除后再次执行“git push -u origin master”命令,弹出如下登录验证:
一路操作后来到这里,表面权限认证成功。
查看git命令行窗口,发现代码已经推送到远程仓库:
再回到远程仓库页面,刷新页面后如下:
发现本地仓库的代码已经推送到远程仓库了。
同时,查看本地中远程仓库地址的重命名情况:
但是,这里有个问题,我们看到远程仓库中现在只有master分支,而本地是有master 和 dev 两个分支:
所以,接下来同样的方式把本地仓库的dev分支也推送到远程仓库,如下:
推送失败,又出现ssl验证问题。(经常出现这个问题,每次都要执行前面的解除ssl命令,比较麻烦,暂时没找到永久性解决办法,后续探索,这里先用前面的命令方式暂时解决。)
该问题原因:当通过HTTPS访问Git远程仓库,如果服务器的SSL证书未经过第三方机构签署,那么Git就会报错,这是十分合理的设计。
接下来执行命令解除ssl验证,并再次尝试推送dev分支到远程仓库:
刷新远程仓库页面,发现dev分支已经被推送成功:
3. 从GitHub克隆代码到公司
文章开头提到的场景:在家和在公司同时开发一个项目。大概交互结构如下:
前面,我们在家里的git里已经开发了代码,并已经完成推送到GitHub远程仓库,接下来了,实践一下上面的场景。
第一步是,到公司将GitHub中的,家里推送的代码克隆到公司的电脑中。这里新建个空的文件夹代表公司电脑中的git仓库,如下:
找到GitHub仓库中的地址:
复制地址,执行“git clone 仓库地址”命令克隆:
模拟公司电脑中的git本地仓库),发现已经克隆成功:
接下来,看一下公司的本地仓库情况:
可以发现一个问题:查看到公司本地仓库只有master一个分支,dev仓库那里去了?( 远程有master和dev仓库)
其实不是这样的,虽然我们只看到了一个分支,但其实dev分支也克隆下来了,可以直接切换到dev分支看一下:
确实可以看到,dev分支实际上已经克隆到公司的本地仓库了。
至此,完成了家里git推送代码到GitHub,公司git从GitHub克隆代码。
4. 实践在家里和在公司同时开发
回顾《Git 的分支策略及工作流》中的开发流程如下:
上面的分支流程实践全部是在家里开发的,代码也已经推送到GitHub,并且已经从GitHub上将代码克隆到公司的本地仓库了。接下来,基于这个场景,接着实践家里git和公司git通过GitHub交互过程。
场景模拟--如下文件夹和命令窗口表示家里:
场景模拟--如下文件夹和命令窗口表示公司:
交互开始,首先从家里开始,开发新功能,切换到dev分支,把master的代码拉到dev(因为基于上面最终场景,dev上没有bug修复内容,在master有最新的代码),如下:
可以看到,现在家里的dev分支是最新的代码了,接下来可以基于这个分支开发了,假如新增了新功能D(新文件),如下:
先开发了30%,提交到家里的本地仓库:
推送到GitHub平台:
注意: “git push -u origin master” 命令中的“-u”是指默认情况下“git push” 命令是将代码推送到 origin 的 master 分支。所以,这里可以直接用“git push origin dev”,不用指定默认。
代码已经推送到GitHub的dev分支,接下来,来到公司的电脑,继续接着开发功能D,如下:
注意:这里不是第一次,所以用pull,不用clone)
拉下来了,查看文件:
在公司继续开发如下:
公司开发到了80%,准备下班,提交代码到公司本地仓库,然后推送到GitHub:
回到家,继续加班完成剩下的部分,开发前先拉取:
家里开发:
开发完成,提交到家里的本地版本,再提交到Github:
由于网络原因,多次推送都失败了,但几次尝试后,总算成功了。
至此,开发完成,也全部代码提交到GitHub了。
接下来,把开发好的dev代码合并到master分支,并提交到远程仓库的master:
现在远程仓库中master 和 dev 分支都是最新的代码。
然后再去到公司的电脑,把远程的master和dev分支的最新代码都拉到公司的本地仓库:
本文实战完成。
总结前面用到的命令:
1. 给远程仓库取别名(origin实际上是地址的别名,也可以用其它名字,默认一般用origin,):
git remote add origin 远程仓库地址
2. 给本地当前分支改名称:
git branch -M 新分支名称
3. 向远程仓库推送代码:
git push -u origin 分支名称
4. 推送代码前,解除ssl验证(推送报错时可能需要):
git config --global http.sslVerify "false"
5. 克隆远程仓库代码:
git clone 远程仓库地址
(该命令执行后,内部已经实现“git remote add origin 远程仓库地址”,下次用时直接用“origin”别名)
6. 切换分支:
git checkout 分支名称
7. 从远程仓库拉取代码:
git pull origin 分支名称