curl快速下载GitHub Repo指定commit的tar.gz

简介: 有些时候需要下载GitHub仓库的tar.gz来做一些其他操作;这时候可能最常见的就是去GitHub上找release或者tag里面有提供tar.gz的资源;然后点击下载~~但是有些场景可能这种操作就不是很方便了,比如给客户打包源码的;快速指定git的tag或者某个commit_hash , download下来然后对于源码做一些加密什么的,再给到客户现场构建部署~;这时候我们就会考虑以脚本来切入,以配置文件的姿势来录入一些参数,然后快速拿到一些我们需要的资源~这里举一个比较单一的场景来开展这篇文章,往下看~

网络异常,图片无法展示
|


前言


有些时候需要下载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.txt
  fi
}
# 上一条命令执行异常就强行退出
check_exec_result() {
  if [ $? != 0 ]; then
    exit 1
  fi
}
# 下载归档资源
download_repo_src() {
  GIT_REPO_NAME=$1
  GIT_REPO_TAG_OR_HASH=$2
  SAVE_ARCHIVE_PATH=$3
  GIT_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_result
  echo "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过去

目录
相关文章
|
3月前
|
Web App开发 Linux 开发工具
告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧
【8月更文挑战第4天】告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧
告别卡顿,畅享GitHub:国内开发者必看的五大加速访问与下载技巧
|
3月前
github下载的.ipynb文件报错unreadable Notebook NotJSONError
【8月更文挑战第2天】文章提供了解决GitHub下载的Jupyter Notebook文件打开时报错的方法,包括端口冲突和文件加载错误。
83 0
github下载的.ipynb文件报错unreadable Notebook NotJSONError
|
3月前
|
敏捷开发 测试技术 持续交付
阿里云云效产品使用合集之从GitHub下载代码失败是什么原因
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
Java 网络安全 开发工具
新手入门Java。如何下载Eclipse、写出最基本的“Hello word”以及如何连接github并且上传项目。
新手入门Java。如何下载Eclipse、写出最基本的“Hello word”以及如何连接github并且上传项目。
58 0
告别龟速,从GitHub快速下载项目的技巧分享,简单又高效!
告别龟速,从GitHub快速下载项目的技巧分享,简单又高效!
|
6月前
|
人工智能 Linux 开发工具
[oeasy]python018_ 如何下载github仓库_git_clone_下载仓库
在这个文档中,作者讨论了如何继续进行编程学习,特别是关于GitHub的使用。首先,回顾了从编写简单代码到管理大量代码的过程。然后,提到了通过“保存运行一条龙”操作来处理代码,以及GitHub作为全球最大的开源软件平台的重要性。在GitHub上,用户可以找到各种软件项目,包括Linux、Python和Blender等。 作者解释了GitHub的基本操作,如点赞(star)、 fork(复制项目)和watch(关注项目更新)。还介绍了如何下载项目到本地,通过`git clone`命令复制仓库的URL并将其粘贴到终端进行下载。如果遇到问题,可以尝试更换HTTP链接或等待一段时间重试。
256 2
|
6月前
|
缓存 网络协议 Windows
FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码
在国内访问GitHub不稳定时,可以采取三种解决方法。首先,通过网站(<https://ping.chinaz.com/github.com>)找到快速响应的GitHub IP,将其添加到本地hosts文件,然后刷新DNS缓存以正常访问。其次,使用代下载网站如(<https://d.serctl.com/>)下载GitHub上的压缩包。最后,可从国内镜像站点,如码云(<https://gitee.com/mirrors/ffmpeg>),下载FFmpeg等开源代码。这些方法有助于绕过访问限制,确保FFmpeg学习与开发的顺利进行。
149 3
FFmpeg开发笔记(六)如何访问Github下载FFmpeg源码
|
6月前
|
机器学习/深度学习 自然语言处理 网络安全
【pkuseg】由于网络策略组织下载请求,因此直接在github中下载细分领域模型medicine
【pkuseg】由于网络策略组织下载请求,因此直接在github中下载细分领域模型medicine
69 1
|
6月前
|
Linux API 开发者
【专栏】掌握`curl`能提升开发效率和解决问题的能力
【4月更文挑战第28天】本文介绍了如何使用`curl`命令从GitHub下载文件。基础操作包括获取文件的克隆URL,打开终端输入`curl -O <file_clone_url>`,执行命令以下载文件。文章还提及了代理设置、认证和错误处理等高级应用,帮助开发者更高效地管理代码和资源。掌握`curl`能提升开发效率和解决问题的能力。
225 4
|
6月前
|
定位技术 Nacos 网络虚拟化
Seata常见问题之Seata github上的asset里面下载不了 zip安装包如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集