如何正确使用带有 Git 钩子的 CI 脚本来压缩源代码

How to properly use CI scripts with Git hooks to compress source

我有一个 feature 分支和一个 testing 分支(用于初始回归)。我想为测试环境的 testing 分支提供一个工作副本。但是,我需要通过脚本压缩一些源代码(不是二进制,只是优化)。我可以通过 post-receive Git 挂钩执行此脚本。

我正在尝试设计我的 bash 脚本(针对 CI),以便它相当健壮并且希望避免自动化导致 Git 冲突。我正在考虑拥有一个主存储库 (origin) 和一个测试环境存储库 (ci_test),只是为了允许 CI 提交。

我正在考虑在推广源代码时推送到 ci_test/testing。 CI 应该压缩、添加、提交、从 origin/testing 获取,必要时合并(考虑他们的完整 iff 冲突),然后推送到 origin/testing

我上面的模型的问题是 Git 在我尝试推送到 ci_test/testing 时抱怨,因为它有一个工作副本(有道理,因为它们可能不同步)。是否有适当的(自动化的)方式将持续集成脚本与 Git 一起使用,以便它们仍然被跟踪?

The problem to my model above is that Git complains when I attempt to push to ci_test/testing because it has a working copy (makes sense, because they may not be synced).

您可以:

  • 确保您的 ci_test 是一个裸仓库,其中 post-receive hook 会:

    • 触发你的所有操作
  • 或者,如果您是唯一推送到 ci_testing 远程仓库的人,请配置远程 Git 以接受推送到 non-bare 仓库。
    这是可能的 since Git 2.3+ 与:

    git config receive.denyCurrentBranch updateInstead
    

with Git 2.4+,您可以使用“push-to-checkout”挂钩设置远程 ci_testing,该挂钩可以安装在服务器上以准确自定义用户推送时发生的情况checked-out 分支。