如何有效地获取特定提交的GitHub存储库?
我正在尝试构建一个持续集成系统。每次推送到GitHub都会触发构建。如何有效地获取特定提交的GitHub存储库?
每个版本都需要检出/下载其正在处理的提交的存储库。我试图找到一种方法来做到这一点,不需要花费几分钟时间处理大型存储库(因为构建只需要几秒钟......)。
请注意,我不想在构建之间存储数据(这会消除缓存的可能性)。
的解决方案,我已经了解:
-
git clone
随后提交的结账:作品,但只需要几分钟的大型资料库 - git 2.5 supposedly introduced a way to fetch a single commit但我不能让它使用GitHub的工作,我的猜测是他们不使用Git 2.5(编辑:doesn't work with GitHub indeed)
- 使用GitHub API for git data但我想不通,如果我能以某种方式下载的所有文件的修订版本,并做有效(即避免单一HTTP热曲每个文件EST)(编辑:看来GitHub上允许下载文件为“树” - 不知道这意味着什么 - 但对于大型的仓库HTTP responses are truncated and they encourage to simply use git ...回到原点)
每隔解决方案,我看到GitHub假定服务器上有最新的git版本,或者克隆版本库一次就可以了,但在我的情况下却不是。我从头开始每一个构建(因为这是一个约束)。
所以我在问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
目录或任何存储库历史记录。
谢谢你的完美!参考[这里是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'(它可以与私有存储库一起使用)。 –
对于公共仓库,它可能是:'curl -sS -L https://api.github.com/repos/$REPOSITORY_NAME/tarball/$COMMI T_ID | tar --strip-components = 1 -C/tmp/code -xz' –
@JoshLee谢谢!至少我知道为什么它不能在GitHub上工作,我不知道我是否做错了什么:) –