如何有效地获取特定提交的GitHub存储库?

问题描述:

我正在尝试构建一个持续集成系统。每次推送到GitHub都会触发构建。如何有效地获取特定提交的GitHub存储库?

每个版本都需要检出/下载其正在处理的提交的存储库。我试图找到一种方法来做到这一点,不需要花费几分钟时间处理大型存储库(因为构建只需要几秒钟......)。

请注意,我不想在构建之间存储数据(这会消除缓存的可能性)。

的解决方案,我已经了解:

每隔解决方案,我看到GitHub假定服务器上有最新的git版本,或者克隆版本库一次就可以了,但在我的情况下却不是。我从头开始每一个构建(因为这是一个约束)。

所以我在问GitHub的具体情况:我该如何下载(以任何方式)在特定提交的代码才能在该提交上运行持续集成工具?

+0

@JoshLee谢谢!至少我知道为什么它不能在GitHub上工作,我不知道我是否做错了什么:) –

你可以下载一个特定的档案利用形式的URL从GitHub承诺:

https://github.com/PROJECT/REPO/archive/COMMITID.zip 

举例来说,如果我有一个名为“dockerize”的项目,我想下载提交ID 169532e我可以运行:

curl -OL https://github.com/larsks/dockerize/archive/169532e.zip 

我用很短的提交ID在这里,但你可以使用长提交ID,或分支机构,或标签等

这会给我.zip存档与该特定提交的文件。*目录将被命名为PROJECT-LONGCOMMITID。例如,上述命令将导致*目录为 dockerize-169532eba46757aca8002e1c9bb257079a739f75/README.md的档案。

这会让你只有该特定提交中的文件;它不会获取.git目录或任何存储库历史记录。

+0

谢谢你的完美!参考[这里是API文档](https://developer.github.com/v3/repos/contents/#get-archive-link),这里是我正在使用的完整命令:'curl - sS -L -H“授权:令牌$ GITHUB_TOKEN”https://api.github.com/repos/$REPOSITORY_NAME/tarball/$COMMIT_ID | tar --strip-components = 1 -C/tmp/code -xz'(它可以与私有存储库一起使用)。 –

+0

对于公共仓库,它可能是:'curl -sS -L https://api.github.com/repos/$REPOSITORY_NAME/tarball/$COMMI T_ID | tar --strip-components = 1 -C/tmp/code -xz' –