前言

有些时候需要下载GitHub仓库的tar.gz来做一些其他操作;
这时候可能最常见的就是去GitHub上找release或者tag里面有提供tar.gz的资源;
然后点击下载~~

但是有些场景可能这种操作就不是很方便了,比如给客户打包源码的;
快速指定git的tag或者某个commit_hash , download下来
然后对于源码做一些加密什么的,再给到客户现场构建部署~;

这时候我们就会考虑以脚本来切入,以配置文件的姿势来录入一些参数,
然后快速拿到一些我们需要的资源~

这里举一个比较单一的场景来开展这篇文章,往下看~

常规CURL下载Github Repo.tar.gz

非私有仓

# 指定路径存放并重命名
curl -Ls  https://github.com/nodejs/node/tarball/v16.6.2  > node.tar.gz # 保留tar.gz原名字
curl -LsO  https://github.com/nodejs/node/tarball/v16.6.2# -L 参数会让 HTTP 请求跟随服务器的重定向。curl 默认不跟随重定向。
# -s 是silent,就是不输出详细过程
# -O 把输出写到该文件中,保留远程文件的文件名

私有仓

  # 可以指定登陆用户和授权token拿到curl -sL --user "${GITHUB_LOGIN_USER}:${GITHUB_AUTH_TOKEN}" ${GIT_ARCHIVE_URL} >${SAVE_ARCHIVE_PATH}# -u,--user 就是指定用户账号和密码,密码也可以用授权token(支持的情况下)--> --user crper:crper_auth_token

单一场景演示

我们这里以下载私有仓的例子说明~

key.txt 变量配置文件

# GITHUB登陆用户
GITHUB_LOGIN_USER=<github_user>
# github授权toke
GITHUB_AUTH_TOKEN=<github_token># github代码tag或者commit hash
# 每一个tag本质上也是对应的一个commit hash
REPO_ORG=<repo_org>
PROJECT_GIT_REPO_TAG_OR_HASH=<project_tag_or_commit_hash>
PROJECT_COMMON_GIT_REPO_TAG_OR_HASH=<project_common_commit_hash>
WIKI_GIT_REPO_TAG_OR_HASH=<wiki_tag_or_commit_hash>
WIKI_COMMON_GIT_REPO_TAG_OR_HASH=<wiki_common_commit_hash># 若是需要在整个shell上下文生效,可以带上export,变成临时环境变量~
# 不带export,在执行那个脚本的上下文可以感知到我们定义的这些变量

demo.sh

#!/bin/bash
# 入口脚本执行路径内src目录的相对路径
SRC_PATH="./src"# 从配置文件读取一些变量定义
init_args() {if [ -f "$SRC_PATH/key.txt" ]; then# . 等同于 source这个命令. $SRC_PATH/key.txtfi
}# 上一条命令执行异常就强行退出
check_exec_result() {if [ $? != 0 ]; thenexit 1fi
}# 下载归档资源
download_repo_src() {GIT_REPO_NAME=$1GIT_REPO_TAG_OR_HASH=$2SAVE_ARCHIVE_PATH=$3GIT_ARCHIVE_URL="https://github.com/${REPO_ORG}/${GIT_REPO_NAME}/tarball/${GIT_REPO_TAG_OR_HASH}"echo "Download Git source archive: ${GIT_ARCHIVE_URL}"curl -sL --user "${GITHUB_LOGIN_USER}:${GITHUB_AUTH_TOKEN}" ${GIT_ARCHIVE_URL} >${SAVE_ARCHIVE_PATH}check_exec_resultecho "Download Git source archive: ${GIT_ARCHIVE_URL} Success!!"
}# 初始化
init_arg# 下载资源
download_repo_src xxx-repo $PROJECT_GIT_REPO_TAG_OR_HASH $SRC_PATH/project.src.tar.gz
download_repo_src xxx-repo $WIKI_GIT_REPO_TAG_OR_HASH $SRC_PATH/wiki.src.tar.gz

下载效果图


实际我们真实业务场景的需求往往是更复杂的,下载资源仅仅是比较简单的一步;
比如配置文件参数校验,路径校验以及环境构建场景,变量注入,
不同的产物组合到不同的镜像,镜像之间资源的互相复用等等~

构建概要信息输出

有时候我们可能需要输出一些构建过程产生的信息,方便追溯或者对比拿到的资源是否正确;

这里可以说下,怎么拿到tag里面的commit_hash~~
通过tarball路径执行下载的包,都有一个标准的文件夹规律,
就是压缩包的第一个目录名字是:
组织+仓库名字+commit_hash(commit_hash永远在最后一个)

有规律后其实就比较好解决了~就是用shell组合裁剪过滤拿即可~代码如下


# 输出构建依赖信息
write_build_info() {PROJECT_COMMIT=$(tar -tf ${SRC_PATH}/project.src.tar.gz | head -n 1 | awk -F '-' '{print $NF}' | sed 's/\///g')WIKI_COMMIT=$(tar -tf ${SRC_PATH}/wiki.src.tar.gz | head -n 1 | awk -F '-' '{print $NF}' | sed 's/\///g')CURRENT_BUILD_DATE=$(date +'%Y-%m-%d_%H:%m')echo "PROJECT_COMMIT=${PROJECT_COMMIT}" >> "$SRC_PATH/build_info.txt"echo "WIKI_COMMIT=${WIKI_COMMIT}" >> "$SRC_PATH/build_info.txt"
}

FAQ

可能有人会说,git clone不是很好用么~~
git clone对于需要快速指定commit拿到对应资源来说其实并不友好;
git clone 目前来说,只支持分支,仓库,仓库Tag,
而commit是需要你clone整个仓库后checkout过去

总结

有不对之处请留言,会及时修正,谢谢阅读~

curl快速下载GitHub Repo指定commit的tar.gz相关推荐

  1. 如何快速下载github代码

    如何快速下载github代码 注册一个gitee账号:gitee网址 登陆后:点击下图右上角"+"号来添加仓库: 出现如下界面:点击右上角的"点击导入": 出现 ...

  2. 快速下载GitHub开源代码

    快速下载GitHub开源代码 1.登录github网站,找到需要下载的开源代码,复制地址(例:https://github.com/saysky/ForestBlog) 2.登录码云https://g ...

  3. Ubuntu18.04系统快速下载Github代码

    1.打开终端,输入: sudo gedit /etc/host 然后就出来一个host的文本编辑 2.用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 ...

  4. linux系统安装.tar.gz文件,Linux中下载、解压、安装.tar.gz文件

    一.将解压包发送到linux服务器上: 1.在windos上下载好.tar.gz文件后,通过winscp等SFTP客户端传送给linux 2.在linux中通过wget命令直接下载 #wget [选项 ...

  5. 如何下载GitHub上指定某个文件夹(下载仓库子文件夹)

    首先进入需要下载的文件夹(比如这个点击后复制地址栏地址) 复制地址栏链接 粘贴到这个网址:https://minhaskamal.github.io/DownGit/#/home 可以点击生成链接,下 ...

  6. 如何快速下载github的release

    地址在此 然而,要注意细节.在你要下载的文件那个地方. 按F12选择元素,找到你要下载的项,然后点<a href="...">那里.点右键,出来复制链接地址(copy ...

  7. JDK 8 下载(jdk-8u212-windows-x64.exe 和 jdk-8u212-linux-x64.tar.gz)

    Java8开发工具包(Java Development Kit) windows 64位标准版, 2019年4月更新版 Java8开发工具包(Java Development Kit) linux 6 ...

  8. linux下载tar.gz文件夹,手把手给你细说linux-Ubuntu如何安装tar.gz文件

    电脑现已成为我们工作.生活和娱乐必不可少的工具了,在使用电脑的过程中,可能会遇到linux-Ubuntu如何安装tar.gz文件的问题,如果我们遇到了linux-Ubuntu如何安装tar.gz文件的 ...

  9. 怎样从Mysql官网下载mysql.tar.gz版本的安装包

    今天学习在Linux上部署项目,用到了Mysql,因此想要下载适用于Linux的安装版本,在Mysql官网找了半天,终于找到怎样下载了,这里写出来,以后大家找的时候就好找了. 第一步:在百度输入Mys ...

最新文章

  1. Don‘t entangle those useless things
  2. Program Size: Code=x RO-data=x RW-data=x ZI-data=x 的含义
  3. 第13章:项目合同管理(1)-章节重点
  4. C语言文本操作以及C语言小技巧
  5. PaddlePaddle实现波士顿房价预测
  6. 根据子树样本数对cart树剪枝与剪枝前后图形绘制
  7. 让VirtualBox虚拟机实现开机自动后台运行
  8. pthread_mutex_init函数《代码》
  9. 协同过滤算法(天池竞赛试题)
  10. 计算机硬件知识大赛,计算机知识技能大赛.doc
  11. WINDOWS上svn服务器自动部署
  12. asp.net未知的服务器标记错误
  13. 《电机学和电机驱动入门》
  14. win7计算机怎么重置,win7系统的电脑如何重置 win7重置电脑的方法
  15. 大学计算机专业分为哪几类
  16. 除夕最炫烟花代码----跨年必备合集
  17. bios error 装系统acpi_WIN10重装系统提示错误ACPI?处理重装系统bios acpi错误
  18. 【Mermaid 语法详细教程 01】 流程图(Flowchart / graph)
  19. Opencv各版本汇总下载
  20. 什么情况下PMP可自学?

热门文章

  1. 高精度基础 (P1601, P1303, P1009, P1591)
  2. Management Information
  3. 浏览者与服务器可通过静态网页进行交互,计算机复习选择题-20210406162218.docx-原创力文档...
  4. TabarItem图片显示过大如何解决方案
  5. 怎样借助营销圈,借助万圣节成功吸粉?
  6. swift 听筒模式_Swift中的存储库模式
  7. C++知识精讲5——printf()函数保留小数点位数方法及实战运用基本方式
  8. 如何让解决tomcat中文乱码问题
  9. 虚拟机性能测试:二 测试工具PCMark 7介绍(附下载地址)
  10. [前端笔记——CSS] 12.处理不同方向文本