我正在尝试构建一个持续集成系统。每次推送到 GitHub 都会触发构建。
每个构建都需要 check out /下载它正在处理的提交的存储库。我正在尝试找到一种在大型存储库上不会花费几分钟的方法(因为构建只需要几秒钟......)。
请注意,我不想在构建之间存储数据(这消除了缓存的可能性)。
我探索过的解决方案:
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 请求)(编辑: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
目录或任何存储库历史记录。
关于git - 如何有效地获取特定提交的 GitHub 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45654440/