【问题标题】:Use detached branch for deployment使用分离的分支进行部署
【发布时间】:2012-07-10 08:48:46
【问题描述】:

我即将为客户设置和自动化构建环境。我想将 Git 存储库推送到客户端的构建服务器,但没有完整的 Git 历史记录。

我正在考虑使用 git checkout --orphan ci 的方法,但我不清楚如何每天使用这样的分支设置。

可能是这样的(?):

  • 将在 master 上创建新的提交。
  • 一个功能在多次提交后完成。
  • ci 分支随后在 master 上重新定位/合并(快进)。
  • ci 分支已签出。
  • 最近的提交(尚未推送到任何服务器)被压缩以向客户端隐藏不必要的历史记录。
  • ci 分支被推送到构建服务器。
  • ...

这是一种有效的方法和/或是否存在更简单的方法?

【问题讨论】:

  • 如果您想丢弃结帐,您也可以使用深度 1 进行克隆。

标签: git github continuous-integration


【解决方案1】:

一种简单的管理方法是:

  • master 上正常工作(或使用任何其他功能分支模型)。
  • 每当您完成一项功能并希望将其推送到 CI 系统时:

    • git checkout ci
    • git merge --squash master 这会将master 中的所有更改带到您的ci 分支。
    • git commit 您将收到一个预填充的提交消息,其中包含所有压缩的提交消息。然后,您可以编辑此消息以反映功能中的所有更改。
    • git push origin ci 将您的更改发送到 CI 系统。

那里有许多分支模型,但这应该足够简单,并且可以满足您的需求。

我希望这会有所帮助。

【讨论】:

  • 谢谢!以及如何创建ci 分支?
  • 一个简单的git checkout -b ci 应该可以。到目前为止,这将包含回购中的所有历史记录。如果你不想要这个,你可以从第一次提交中创建 ci 分支。您可以使用git log --reverse --pretty=oneline | head -1 之类的内容找到第一次提交的 id。然后git checkout -b ci <id of the first commit>。此时您可以签出ci 分支并从主分支进行第一次压缩合并。
  • 是否建议运行git checkout master && git merge ci 为未来的壁球合并提供参考?
  • 您可以在 ci 分支中运行 git merge master --squash -Xtheirs-Xtheirs 将从 master 获取更改并覆盖 ci 中的任何冲突。这应该没问题,只要您不将 ci 分支用于将代码从 master 推送到 CI 系统之外的任何其他用途,
  • @mampitufo 但是git merge master(即使是--squash)不会让master 的历史可以从ci 获得吗?这是 OP 说他希望避免的:“我想将 Git 存储库推送到客户端的构建服务器,但 没有完整的 Git 历史记录。”
【解决方案2】:

我会看http://nvie.com/posts/a-successful-git-branching-model/之类的东西

至于 CI,您可能最终会克隆/签出几乎整个分支,但除非您放入一堆大型二进制文件,否则我不会太担心。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-04
    • 2010-12-02
    • 2018-07-16
    • 2022-08-24
    • 1970-01-01
    • 2022-07-14
    • 2018-08-27
    • 1970-01-01
    相关资源
    最近更新 更多