【问题标题】:Git repo with production branch only (no development history)仅带有生产分支的 Git 存储库(无开发历史)
【发布时间】:2019-12-11 09:20:11
【问题描述】:

我搜索了一下,但只找到了类似问题的解决方案。那么,是否有可能拥有一个仅包含 Production(或任何您喜欢的名称)分支的远程仓库,并且不引用合并到 Production 的其他分支上的提交?我们永远不会进行快进合并,因此Production 分支将只有发布提交,这些提交旨在实际发布。

我们的目标是限制对没有开发历史和中间进度的正确版本的访问。我试图寻找限制分支访问,但只找到了保护分支从写入到不读取的引用。我确实意识到这可能有点违背 Git 本身的目的,我可能只是将发布包上传到某个地方,但如果可能的话,增量保存它似乎更容易,磁盘空间/网络效率更高。

我可以想象的解决方法是拥有第二个本地存储库,我将在其中仅复制和提交当前版本代码,但目前它是 B 计划。 :-)

【问题讨论】:

  • 我不确定我是否理解您要解决的问题。在生产中提供额外的提交是否会导致任何问题?无论如何,如果你不想要任何历史记录,你可以使用 rsync 比使用 git 协议更节省带宽。
  • 搜索“git squash”。基本上和过于简单化:你在一个拥有所有历史的分支上开发。完成后,您通过将所有分支提交压缩为一个,将该分支合并到生产中。然后,您只在您的参考遥控器上推送该生产分支。
  • @SvenMarnach 我想了解历史,但仅限于发布提交。我们正在尝试一种没有“正在进行”的东西的“前端”回购。这肯定有点心血来潮,但我想知道 git 是否可行。 :-)
  • @Zeitounator 我想您还必须将压扁的提交重新定位到 Production 分支上?谢谢你的提示,我会调查的。
  • @konrad 你可以简单地使用git merge --squash,如果这是你想要的,不需要变基。

标签: git release


【解决方案1】:

如 cmets 中所述,您可以通过始终使用 squash 合并来“分离”发布分支的历史记录。每次你想要合并一个不应该在发布仓库中可见的分支时,你可以使用类似于这些的命令:

git checkout release
git merge --squash cool-feature-branch
git commit -m "Release cool feature."

或者,您可以清理现有的发布分支并仅保留带有filter-branch 的“主线”提交:

git checkout release
git filter-branch --parent-filter 'read a b rest; echo $a $b' -- --first-parent

此命令仅通过跟踪每个提交的第一个父级来枚举发布分支上的提交,并仅使用单个父级重写这些提交。最终结果是分支与所有已合并的分支“分离”(快进合并除外,它与直接提交到分支的提交无法区分)。

一旦您准备好一个发布分支,其中只包含您希望对您的客户可见的提交,您可以使用git log release 来验证提交列表,并使用git push <remote> release 来推送发布分支。这只会推送git log 显示的提交。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2023-03-17
    • 2012-02-18
    • 2020-05-28
    • 2015-07-24
    • 1970-01-01
    • 2019-02-05
    相关资源
    最近更新 更多