git


Git托管平台

komantao 2020-01-14 2020-01-14 字数 6877 阅读量


主要介绍GitHub和Gitee。

一、概述

托管平台 优点 缺点
GitHub (公开和私有仓库)完全免费,支持自定义域名https访问、支持WebHook,国内访问速度一般 百度收录比较困难
Gitee 支持自定义域名https访问、支持WebHook,国内访问速度快 自定义域名及其他进阶功能需要付费、自定义域名需备案
Gitlab 支持无限的公有仓库和私有仓库
Coding 完全免费 访问速度慢(可以使用国内CDN加速)
腾讯云对象存储COS 访问速度非常快、收费、支持私有仓库静态网站、支持Hexo图床、可以设置防盗链 自定义域名必须要备案、配置比较复杂、可能要付费、不支持WebHook
Readthedocs 创建、托管和浏览文档,存放不同语言的各种库的文档(静态页面)的网站,内部支持使用Sphinx/Mkdocs
Bitbucket 免费支持5个开发成员的团队创建无限私有代码托管库
Sourceforge

二、GitHub

GitHub提供Git仓库托管服务,只要注册一个GitHub账号,就可以免费获得远程仓库,是用于版本控制和协作的代码托管平台,方便多人在任何地方协同工作。

官方文档:GitHub GuidesGitHub Help

1、GitHub帐户

  1. 注册GitHub帐户

    GitHub网站首页注册或在导航栏中点击“sign up”注册,如下图:

    image-20200107103535097

  2. 帐户设置

    在上方导航栏的右侧点击“登录头像”,在弹出的列表中点击“Settings”菜单项:

    image-20200107130243147

    • 进入帐户的设置页面,操作有:个人设定、帐户密码更改、添加与帐户关联的SSH keys、添加个人访问令牌等

2、GitHub仓库

可以在GitHub中创建多个仓库。一个仓库应该只组织一个项目。仓库可以包含项目中的所有或部分文件(文件夹、文件、图片、视频、电子表格、数据集等)。

  1. 新建仓库

    image-20200106225629300

    • 方法1:登录(sign in)帐号后,在欢迎界面点击“Start a project”按钮

    • 方法2:在左侧的仓库列表中

      • 完全空白时,(如上图所示)点击“Create a repository”按钮

      • 已有仓库时,点击“New”按钮

        image-20200107120502989

    • 方法3:在上方导航栏的右侧点击“+”(登录头像左侧),在弹出的列表中点击“New repository”按钮

  2. 仓库设置基本信息

    创建仓库后,进入新建仓库设置页面:

    image-20200106231120880

    • Owner:所有者,自动调取用户名称

    • Repository name:必选,仓库名称。不能有中文(无法显示中文)

    • Description:可选,仓库的描述

    • 设置仓库权限

      • Public:公开,任何人可以查看此仓库;可以指定人提交到此仓库
      • Private:私有,指定人可以查看并提交到此仓库
    • Skip this step if you’re importing an existing repository

      如果要导入现有存储库,请不要勾选下面选项:

      • Initialize this repository with a README:

        勾选后,GitHub自动创建一个README.md文件初始化此仓库。

        可添加忽略文件(.gitignore)和许可证(license)。

    • Create repository:设置后,点击“Create repository”创建一个新的远程仓库

  3. 仓库设置

    某一个仓库的具体设置。

    在仓库列表中点击某一个仓库名,进入仓库页面,点击工具栏中的“Settings”:

    image-20200107122119111

    进入仓库的设置页面:

    image-20200107122730823

    • 操作有:重命名、删除仓库、添加协作者、部署keys、开启GitHub Pages
  4. 推送仓库

    仓库的代码(Code)页面,显示了将本地仓库推送到远程仓库的命令:

    image-20200107102821821

    仓库非空白时,“Code”页面显示已推送的代码文件。

3、GitHub Pages

GitHub Pages旨在托管GitHub存储库中的个人,组织或项目页面。

  • 升级到GitHub Pro或将此存储库公开以启用Pages
  • 发布GitHub Pages站点,首先将发布内容添加(push)到存储库的master分支

GitHub Pages在使用上的限制:

  • 一个仓库大小不得超过1GB
  • 生成的GitHub Pages站点大小不得超过1GB
  • GitHub Pages站点每月限100GB流量
  • GitHub Pages站点每小時限构建10次

传闻:GitHub Pages屏蔽了百度爬虫的抓取,导致百度无法抓取GitHub Pages网页。

4、SSH keys

本地仓库和GitHub仓库之间的传输可以通过SSH协议加密传输。在传输前,GitHub需要识别是谁提交了推送(防止别人冒充),GitHub核对了你的公钥,就确认是你自己在推送。

  1. 本地创建SSH Key

    查看当前用户目录(C:/Users/用户名/.ssh)内有没有id_rsaid_rsa.pub这两个文件:

    • 若有,表示本地已创建了SSH Key,此步骤可忽略

    • 若无,或想更换SSH Key

      1. Git Bash运行ssh-keygen -t rsa -C "用户E-mail"命令

        $ ssh-keygen -t rsa -C "xxx@hotmail.com"
        Generating public/private rsa key pair.
        Enter file in which to save the key (/c/Users/xxx/.ssh/id_rsa):
        
        • 等待输入路径,设置SSH Key的存储路径
        • 改变SSH Key的存储路径,可使得本地可以有多个SSH Key
      2. 直接按Enter键采用默认路径

        Created directory '/c/Users/xxx/.ssh'.
        Enter passphrase (empty for no passphrase):
        
        • 等待输入密码(空白表示无密码;否则,每次使用SSH Key时输入密码)
      3. 输入密码后,生成SSH Key

        Your identification has been saved in /c/Users/xxx/.ssh/id_rsa.
        Your public key has been saved in /c/Users/xxx/.ssh/id_rsa.pub.
        The key fingerprint is:
        …………
        The key's randomart image is:
        …………
        
        • 成功后,.ssh目录内有id_rsaid_rsa.pub两个文件。这两个文件是SSH Key的秘钥对,id_rsa是私钥,不能泄露;id_rsa.pub是公钥,可以公开
  2. GitHub添加SSH Key

    1. 登陆帐号后,在上方导航栏的右侧点击“登录头像”,在弹出的列表中点击“Settings”

    2. 进入“Personal settings”界面,左侧点击“SSH and GPG keys” ,点击“New SSH key”

      image-20200107131413526

    3. 进入SSH keys添加界面

      image-20191031145600391

      • Title:SSH keys的别名,名称可随便填写,习惯使用公钥的E-mail
      • Key:使用文本编辑器将公钥(C:/Users/当前用户名/.ssh/id_rsa.pub文件)内容复制到此处
      • Add SSH key:点击按键完成添加。回到“Personal settings”界面,发现已添加了一个SSH key
    4. 验证是否成功,在git bash下输入:

      $ ssh -T git@github.com
      The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
      RSA key fingerprint is xx.xx.xx.xx.xx.
      Are you sure you want to continue connecting (yes/no/[fingerprint])?yes
      Warning: Permanently added the RSA host key for IP address 'xxxxxx' to the list of known hosts.
      Enter passphrase for key '/c/Users/xxx/.ssh/id_rsa':
      Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
      
      • 第一次使用SSH key时,将触发一个SSH警告:

        The authenticity of host 'github.com (xx.xx.xx.xx)' can't be established.
        RSA key fingerprint is xx.xx.xx.xx.xx.
        Are you sure you want to continue connecting (yes/no/[fingerprint])?
        

        因为Git使用了SSH连接,SSH在第一次验证GitHub服务器的Key时,需要你确认GitHub的Key指纹信息是否真的来自GitHub的服务器,输入yes回车即可。

        如果担心有人冒充GitHub服务器,输入yes前可以对照GitHub的RSA Key的指纹信息是否与SSH连接给出的一致。

      • 输入yes回车后,Git会再弹出一个警告:

        Warning: Permanently added 'github.com,xx.xx.xx.xx' (RSA) to the list of known hosts.
        Enter passphrase for key '/c/Users/xxx/.ssh/id_rsa':
        

        警告信息表示已将GitHub的Key添加到本机系统的一个信任列表内(C:/Users/当前用户名/.ssh/known_hosts)。

        提示输入密码是因为在本地创建SSH Key时设置了密码。若输错密码:

        Received disconnect from xx.xx.xx.xx: Bye Bye
        Disconnected from xx.xx.xx.xx
        
        • 收到从xx.xx.xx.xx端口断开的信号,再见
        • 从xx.xx.xx.xx断开
      • 身份验证成功

        Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.
        

        您已经成功地进行了身份验证,但是GitHub不提供shell访问。

5、token

个人访问令牌(Personal access tokens)主要用于脚本(scripts)或测试(testing),功能类似于普通的OAuth访问令牌。可以代替HTTPS上的Git密码,也可以用于 通过基本身份验证向API进行身份验证

  1. 创建token

    路径:页面上方导航栏的右侧点击“登录头像” — 在弹出的列表中点击“Settings” — 在“Personal settings”界面,左侧点击“Developer settings” — 左侧点击“Personal access tokens” — 右侧点击“Generate new token”。

    image-20200107145920480

    定义(选择)token的访问范围后,点击最下面的“Generate token”按钮生成token:

    image-20200107150129510

  2. 复制token

    返回“Personal access tokens” 页面,提示“Make sure to copy your new personal access token now. You won’t be able to see it again!”

    • 确保立即复制新的个人访问令牌:将生成的token复制备用(例如放入脚本内)
    • 您将无法再次看到它:若刷新页面,不会再次显示token的编码内容

6、Fork

GitHub有一个Fork(分叉)操作,进入某个上游仓库(第三方的开源仓库)后,点击“Fork”按键(即执行分叉操作),可以将此仓库克隆至自己的GitHub仓库。

1555991034266

这个仓库(项目)的使用方法和自己的仓库一样,例如:

  • 克隆至本地仓库:git clone 自己的远程仓库地址

    修改和推送等操作是在本地完成,因此一定要在自己的账号下clone仓库。推送修改,需要第三方提供“Pull requests”权限。

7、网站加速

GitHub在国内访问速度慢的问题原因有很多,但最直接和最主要的原因是GitHub的分发加速网络的域名遭到dns污染。例如有时无法显示图片(图片挂掉了):

image-20200113113501709

报错Failed to load resource: net::ERR_CERT_COMMON_NAME_INVALID:用一个错误的域名访问了某个节点的https资源。

导致这个错误的原因基本是:

  1. dns污染
  2. host设置错误
  3. 官方更新了dns,但是dns缓存没有被更新,导致错误解析

7.1 host重启向

修改系统的hosts文件,绕过国内dns解析,直接访问GitHub的CDN节点。效果一般。

以GitHub网站为例,修改系统的hosts文件,达到网站加速访问的效果:

  1. 获取域名

    • 图片挂掉的域名

      打开GitHub任意带有挂掉图片的网页,在挂掉的图片上"检查元素”,定位到该图片的标签,复制其URL(src属性)备用,指从https://(不包含)到com(包含)的内容。

    • github.com:GitHub网站

    • GitHub的其它子域名:可在IPAddress.com网站内查看

    • assets-cdn.github.com:GitHub Pages网站

    • avatars0.githubusercontent.com:GitHub的用户头像等

    • github.global.ssl.fastly.net

  2. 获取IP地址

    当一个域名使用CDN时,会有多个IP地址。不同地点的DNS服务器会影响访问速度。

    • 使用cmd,只能查看最近的DNS服务器维护的IP地址

      $ nslookup github.com
      服务器:  cache-a.xxx.xxx.xxx
      Address:  xxx.xxx.xxx.xxx
           
      非权威应答:
      名称:    github.com
      Address:  13.229.188.59
      
    • 使用IPAddress.com网站,在搜索框内输入域名可得到:DNS服务器、IP地址、子域名等众多信息,但没有直观显示IP地址的TTL值。

      image-20200115124835095

    • 使用chinaz网站的DNS查询,查找IP地址

      image-20200115130532670

      • 多次点击“检测”,可获取多个IP地址

      • 海外服务器的速度(响应时间)是不确定的,“老板”想限速就限速。所以不能简单地认为TTL值最小就是速度最快

      • 相同云服务商的ip速度肯定是差不多的,因此对每个服务商只测试一个ip

        在本地测试(Ping)上面所有ip的响应时间和TTL值:

        $ ping 13.229.188.59
               
        正在 Ping 13.229.188.59 具有 32 字节的数据:
        请求超时。
        请求超时。
        请求超时。
        请求超时。
               
        13.229.188.59 的 Ping 统计信息:
            数据包: 已发送 = 4,已接收 = 0,丢失 = 4 (100% 丢失),
        
    • 使用chinaz网站的Ping检测,自动获取IP地址并Ping检测

      image-20200115134225334

      在响应时间最短的前提下,选择TTL值最小的IP地址。

      github.com的最优IP地址是192.30.253.112

      image-20200115134628248

      在本地测试(Ping)最优IP地址:

      $ ping 192.30.253.112
           
      正在 Ping 192.30.253.112 具有 32 字节的数据:
      来自 192.30.253.112 的回复: 字节=32 时间=265ms TTL=45
      来自 192.30.253.112 的回复: 字节=32 时间=266ms TTL=45
      来自 192.30.253.112 的回复: 字节=32 时间=264ms TTL=45
      来自 192.30.253.112 的回复: 字节=32 时间=267ms TTL=45
           
      192.30.253.112 的 Ping 统计信息:
          数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
      往返行程的估计时间(以毫秒为单位):
          最短 = 264ms,最长 = 267ms,平均 = 265ms
      

      GitHub的其他子域名,可以采用类似方法寻找最优ip。

      可在cmd下输入tracert URL或IP命令(Windows路由跟踪程序)查看IP数据包访问目标时经历的路径(访问国外时速度很慢):

      $ tracert github.com
      通过最多 30 个跃点跟踪
      到 github.com [192.30.253.112] 的路由:
           
        1    <1 毫秒   <1 毫秒   <1 毫秒 xxx.xxx.xxx.xxx   # 用户路由的私有IP
        2     2 ms     4 ms     4 ms  xxx.xxx.xxx.xxx     # 用户光猫的私有IP
        3     7 ms     4 ms     2 ms  xxx.xxx.xxx.xxx     # 国内电信的机房IP   
        4     6 ms     4 ms     5 ms  xxx.xxx.xxx.xxx     # 国内电信的机房IP
        5     3 ms     2 ms     2 ms  xxx.xxx.xxx.xxx     # 国内电信的机房IP
        6     3 ms     4 ms     3 ms  xxx.xxx.xxx.xxx     # 国内电信的机房IP
        7   213 ms     *      216 ms  xxx.xxx.xxx.xxx     # 国内电信的机房IP
        8   210 ms   213 ms   202 ms  xxx.xxx.xxx.xxx     # 国内电信的机房IP
        9   212 ms   203 ms   203 ms  ae0.mcs1.ams10.nl.eth.zayo.com [64.125.29.68]
       10   273 ms   254 ms   268 ms  ae1.cs1.ams10.nl.eth.zayo.com [64.125.29.70]
       11   256 ms   257 ms   251 ms  ae2.cs1.lhr15.uk.eth.zayo.com [64.125.29.17]
       12     *        *        *     请求超时。
       13   253 ms     *      261 ms  ae5.cs3.lga5.us.eth.zayo.com [64.125.29.126]
       14   260 ms   262 ms   249 ms  ae4.cs1.dca2.us.eth.zayo.com [64.125.29.203]
       15   263 ms   273 ms   251 ms  ae0.cs2.dca2.us.eth.zayo.com [64.125.29.229]
       16   258 ms     *        *     ae9.cs4.iad93.us.eth.zayo.com [64.125.25.101]
       17   248 ms   256 ms   256 ms  ae7.er1.iad47.us.zip.zayo.com [64.125.30.131]
       18   248 ms     *      249 ms  209.66.120.179.IPYX-243981-003-ZYO.zip.zayo.com [209.66.120.179]
       19     *        *        *     请求超时。
       20     *        *        *     请求超时。
       21     *        *        *     请求超时。
       22   245 ms   245 ms   245 ms  github.com [192.30.253.112]
           
      跟踪完成。
      
  3. 修改hosts

    修改hosts文件(C:/Windows/System32/drivers/etc/hosts),使IP直接映射域名。

    hosts文件示例:

    # 以下是自定义内容。IP映射域名语法:IP地址+空格+域名
    192.30.253.112 github.com
    185.199.111.153 assets-cdn.github.com
    151.101.1.194 github.global.ssl.fastly.net
    151.101.64.133 avatars0.githubusercontent.com
    151.101.64.133 avatars1.githubusercontent.com
    151.101.64.133 avatars2.githubusercontent.com
    151.101.64.133 avatars3.githubusercontent.com
    151.101.64.133 avatars4.githubusercontent.com
    185.199.110.153 github.io
    140.82.113.10 codeload.github.com
    157.230.37.202 netlify.com
    
  4. 刷新系统dns缓存

    适用于Windows平台,Linux可跳过此步骤。

    用WIN+R快捷键打开运行窗口,输入命令:cmd并回车进入命令行窗口。接着输入命令:ipconfig /flushdns回车后执行刷新本地dns缓存数据即可。

    $ ipconfig /flushdns
    Windows IP 配置
    已成功刷新 DNS 解析缓存。
    

7.2 码云中转

效果很好,但略显麻烦。此方法只适用于git clone时。

  1. 点击页面右上角的 “+” 号(帐户头像左侧),选择“新建仓库”:

    image-20200115011152233

  2. 在新页面中点击“导入已有仓库”:

    image-20200115011338259

    • 仓库的其它信息一概不需要填写
  3. 输入需要导入的Github项目的git地址,点击“创建”

    image-20200115011554008

  4. Gitee拉取过程的耗时因拉取项目大小而异,完成后就可以在Gitee中高速git clone

    $ git clone git@gitee.com:用户名/hugo-theme-learn.git
    Cloning into 'hugo-theme-learn'...
    remote: Enumerating objects: 2317, done.
    remote: Counting objects: 100% (2317/2317), done.
    remote: Compressing objects: 100% (1017/1017), done.
    remote: Total 2317 (delta 1266), reused 2317 (delta 1266)
    Receiving objects: 100% (2317/2317), 13.42 MiB | 2.46 MiB/s, done.
    Resolving deltas: 100% (1266/1266), done.
    
    • 对比GitHub只有几十K/s的龟速,Gitee的总耗时少了很多

    • 下载后,若无需要,删除Gitee上导入的项目仓库;若有需要,可在以后同步:

      image-20200115153329140

8、PR/MR

Pull Request(PR)和Merge Request(MR):

  • 在GitHub向开源库贡献代码或者修复bug时

    一般开源库不会给其他人开放push权限。

    若有好想法或者发现开源库有bug时,怎么才能将自己的想法贡献给开源库呢?

    1. 先Fork(关联复制)一份开源库A的代码到自己的GitHub账号下(例如A1)
    2. 自己对于A1有完全权限,此时在A1上加入自己的代码(例如commitA)
    3. 发送Merge Request到原A库作者
    4. 原A库作者审核同意后,将commitA merge到A库代码中
  • 在企业多人开发协作时 在开发产品时,通常挑选一个分支作为上线的正式版本分支(例如master或release),开发分支例如命名为develop,可能带有bug。 当多人参与同一个项目时,每个人都有Commit到master分支的权限是非常不合理的。这个时候,就可以使用Fork + PR/MR的方式来实现多人协作开发,这样协作开发效率高,问题少:

    1. 每个开发者先Fork一份代码到自己的账号下

    2. 功能完成后发PR给项目管理者

    3. 项目管理者Code Review后确认无误后即可进行Merge操作

二、Gitee

码云开源中国的Git代码托管平台。

使用GitHub时,国内的用户经常遇到的问题是访问速度太慢,有时候还会出现无法连接的情况。如果希望体验Git飞一般的速度,可以使用国内的Git托管服务——码云。

2.1 基础用法

基本用法参考GitHub,码云全中文显示,应该上手很简单。

详细用法参阅:码云帮助中心码云使用手册

2.2 搭建图床

利用Gitee Pages服务搭建图床(托管图片),参阅:使用gitee搭建免费的图床

  1. 准备工作

    • 首先要有一个gitee帐户
    • 然后在本地配置一下自己的SSH
    • 最后本地有Git环境,用于后面图片的提交
  2. 在Gitee新创建一个仓库

    • 是否开源:勾选“公开”
    • 使用Readme文件初始化这个仓库:勾选
  3. 添加文件index.html(名称必须是index.html)

    进入新建仓库页面,点击工具栏中的“文件”,点击“新建文件”:

    image-20191102001122539

    • 文件内容:
    • 提交信息:必填
  4. 选择pages服务并启动

    在仓库页面的菜单栏点击“服务”,选择”Gitee Pages”:

    1556447943237

    进入Gitee Pages界面后

    • 部署分支:选择master
    • 部署目录:可不填
  5. 访问生成的网站地址

    已开启Gitee Pages服务后,访问page首页地址。

  6. 将gitee的图床仓库拉取到本地

    然后将本地路径的图片目录放到本地仓库的项目路径内。

  7. 优化gitee page首页

    • 为了首页好看,在模板之家下载了一套模板
    • 自己修改了一下,删除不需要的文件
    • 直接放到第6步下载的项目路径 — commit — push
  8. 日常使用

    • 书写Markdown使用的是Typora,在编辑一篇内容时,首先会建一个文件夹,将对应的图片放到一起,在Typora中直接引用本地路径的图片地址。
    • 然后等内容写好后将图片提交到gitee上,最后使用Typora的源代码模式,将内容拷贝到文本编辑器后,将本地图片地址全部替换成gitee的地址(只需要替换图片前面的路径)!

感谢您的赞赏支持:

Copyright © 2020 komantao. All Rights Reserved.