# 源码获取

# 概述

本文的旨在介绍如何配置SSH Key以及源码拉取。

# 问题指引

SSH配置成功后仍旧Permission denied, please try again 拉取代码git抛出无权限异常
移除无权限的子模块 git子模块在submodule文件内声明却无法拉取代码

# 操作步骤

# 配置SSH Key

# 1. 在电脑的空闲磁盘上创建目录,并且安装Git客户端程序。

安装Git客户端程序不在此处进行详述,可自行百度搜索安装Git。

# 2. 登录Github,进入个人中心->Settings->选择SSH and GPG keys

选择settings 选择ssh keys

# 3. 创建SSH key

说明

在2021年8月13日Github停止了对https用户名及验证码的支持,因此本文档建议您使用SSH连接的方式拉取代码。

create ssh keys

在第一步新建的目录内,右键空白处弹出菜单git bash here,在弹出的shell控制台内执行下方命令:

该命令需要修改邮箱地址为您自己的邮箱地址。

$ ssh-keygen -t ed25519 -C "your_email@example.com"

示例如下:

$ ssh-keygen -t ed25519 -C "445123732@qq.com"
Generating public/private ed25519 key pair.
#回车
Enter file in which to save the key (/c/Users/LJ/.ssh/id_ed25519): 
#回车 
Enter passphrase (empty for no passphrase):
#回车
Enter same passphrase again:
# 提示生成了公钥和身份信息
Your identification has been saved in id_ed25519
Your public key has been saved in id_ed25519.pub
The key fingerprint is:
SHA256:IBctEwVoRajdZLE29buxRlpxPDW5E4z453215tgUqcTQIrUrs 445123732@qq.com
The key's randomart image is:
+--[ED25519 256]--+
|     =O*+o.+.=o. |
|  . .=.=  .+ .+  |
|      E S =    . |
|         + +     |
|        . +      |
|         .       |
|                 |
|                 |
|                 |
+----[SHA256]-----+

提示

注意: 如果您使用的遗留系统不支持 Ed25519算法,请使用下方命令并替换邮箱地址:


$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# 4. 将生成的ssh key添加至github内。

创建完成后使用下方命令复制公钥内容,

$ clip < ~/.ssh/id_ed25519.pub

提示

如果clip命令不起作用,您可以找到隐藏的.ssh 文件夹,隐藏的.ssh 文件夹一般在C:\Users\{PC机名称}目录下, 找到该目录下的.pub文件,复制该内容粘贴至github的添加SSH Key输入框内,如下图。

create ssh keys2

# 获取源码

# 1. 拉取代码

进入第一步创建的文件夹内执行拉取代码及子模块

  • 拉取jetlinks-pro
 $ git clone -b master --recurse-submodules git@github.com:jetlinks-v2/jetlinks-pro.git
  • 拉取jetlinks-cloud
 $ git clone -b master --recurse-submodules git@github.com:jetlinks-v2/jetlinks-cloud.git

# 2. 更新基础子模块

提示

JetLinks物联网平台只包含基础模块, 扩展模块添加请参考第3步, 未购买扩展模块可以跳过第3步。非首次拉取代码时更新任意代码后,仍需执行reimport。 下方命令如手动复制执行,可以使用jetlinks-pro根路径下的update.sh脚本自动更新子模块代码。

$ git pull && git submodule init && git submodule update && git submodule foreach git checkout master && git submodule foreach git pull origin master

# 3. 首次更新添加JetLinks扩展子模块

执行下方命令添加子模块

$ git submodule add --force [git仓库地址] [下载文件路径]

此处使用电信ctwing模块作为示例命令,其余模块同理:

$ git submodule add --force git@github.com:jetlinks-v2/jetlinks-ctwing.git expands-components/jetlinks-ctwing

扩展模块仓库信息

模块名称 仓库名称 仓库地址
阿里云平台接入 jetlinks-aliyun-bridge-gateway git@github.com:jetlinks-v2/jetlinks-aliyun-bridge-gateway
电信CTWing平台接入 jetlinks-ctwing git@github.com:jetlinks-v2/jetlinks-ctwing.git
小度平台接入 jetlinks-dueros git@github.com:jetlinks-v2/jetlinks-dueros.git
移动OneNet平台接入 jetlinks-onenet git@github.com:jetlinks-v2/jetlinks-onenet.git
GBT/28181视频设备接入 jetlinks-media git@github.com:jetlinks-v2/jetlinks-media.git
Modbus/TCP jetlinks-modbus git@github.com:jetlinks-v2/jetlinks-modbus.git
OPC UA jetlinks-opc-ua git@github.com:jetlinks-v2/jetlinks-opc-ua.git

# 同步至自建仓库

# 1.提交代码至自建仓库

$  git remote add gitee "git@gitee.com:/jetlinks-v2/$(echo ${PWD##*/}).git"
$  git submodule foreach 'git remote add gitee "git@gitee.com:/jetlinks-v2/$(echo ${PWD##*/}).git"'
$  git push gitee master
$  git submodule foreach git push gitee master 

# 2. 更新源仓库代码并同步自建仓库

查看远程仓库信息

$  git remote -v
# gitee 是上一步remote add声明的自建仓库名
gitee   git@gitee.com:/jetlinks-v2/jetlinks-v2.git (fetch)
gitee   git@gitee.com:/jetlinks-v2/jetlinks-v2.git (push)
#origin 一般是源原仓库
origin  git@github.com:jetlinks-v2/jetlinks-pro.git (fetch)
origin  git@github.com:jetlinks-v2/jetlinks-pro.git (push)

执行完更新子模块命令后执行下方命令同步至自建仓库

# gitee代表推送至自建仓库名为gitee的远程仓库, master为分支名
$ git push gitee master

# 常见问题

# Permission denied, please try again

问题

Q:配置完SSH Key如果仍提示需要输入git@github.com‘s password,且尝试了所有密码均提示:Permission denied, please try again。

A:Github官网给出的说法是:防火墙拒绝完全允许SSH连接。如果不能使用带有凭据缓存的HTTPS克隆,可以尝试使用通过HTTPS端口建立的SSH连接进行克隆。 大多数防火墙规则应该允许这样做,但是代理服务器可能会干扰。可以参照下方步骤解决该问题。

  1. 要测试是否可以通过 HTTPS 端口使用 SSH,请运行以下 SSH 命令。
$ ssh -T -p 443 git@ssh.github.com
> Hi USERNAME! You've successfully authenticated, but GitHub does not
> provide shell access.
  1. ~/.ssh目录下编辑或创建config文件,并添加下方内容。

~/.ssh目录在第四步的提示内有说明。

Host github.com
Hostname ssh.github.com
Port 443
User git
  1. 在切换到端口443后第一次与 GitHub 交互时,您可能会收到一条警告消息。

此处在配置公钥过后选择yes即可

> The authenticity of host '[ssh.github.com]:443 ([140.82.112.36]:443)' can't be established.
> ED25519 key fingerprint is SHA256:+DiY3w123423JhbpZisF/13423sdfeslilkjsdf.
> This host key is known by the following other names/addresses:
>     ~/.ssh/known_hosts:32: github.com
> Are you sure you want to continue connecting (yes/no/[fingerprint])?
  1. 配置好上述内容后,执行拉取命令即可。

# 拉取代码git抛出无权限异常

问题

Q:拉取代码的时候出现 Please make sure you have the correct access rights and the repository exists

A:确认是否购买该模块或者账户未被添加进仓库,请联系商务。

# 移除无权限的子模块

问题

Q:移除无权限(make sure you have the correct access rights)的子模块。

A:git rm -f [submoduleName],

示例:

git rm -f expands-components/jetlinks-lwm2m

# git子模块在submodule文件内声明却无法拉取代码

问题

Q:git子模块在submodule文件内声明却clone代码至本地。

A:解决方案是移除该模块后再重新添加模块。

示例:

git rm -f expands-components/expands-components/jetlinks-media
git submodule add --force git@github.com:jetlinks-v2/jetlinks-media.git expands-components/jetlinks-media