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

标签 git github

我正在尝试构建一个持续集成系统。每次推送到 GitHub 都会触发构建。

每个构建都需要 check out /下载它正在处理的提交的存储库。我正在尝试找到一种在大型存储库上不会花费几分钟的方法(因为构建只需要几秒钟......)。

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

我探索过的解决方案:

我在 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/

相关文章:

android - 通过 Android Studio 将现有的 Android 项目添加到 VSTS

git - merge 两个 Git 分支,但排除某些文件

visual-studio - GitHub 和 Visual Studio

git - 无法使用子模块推送 Git 存储库的提交

Git:删除子模块错误

ruby - 如何在 GitHub 上搜索 RubySpec?

git - 删除某个提交,就好像它从未发生过一样

git - 从 Git 中提取失败并给我以下错误 : client_global_hostkeys_private_confirm: server gave bad signature for RSA key 0

git - 如何管理提交者的层次结构(如 Linux 内核开发)

git - 使用 git pull 特定版本